elasticsearch全文检索引擎,底层使用lucene
,可扩展,高可用,易使用等特点使之成为最近几年来最炙手可热的搜索引擎开源项目,至今已发展到7.x版本,现在让我们初步安装并使用elasticsearch吧
版本: 7.10.1
系统环境:mac
安装并启动
- 安装并启动elasticsearch https://www.elastic.co/cn/downloads/elasticsearch
- 安装并启动kibana https://www.elastic.co/cn/downloads/kibana
基本使用
kibana 数据可视化,内部提供了开发工具,可以帮助初学者很好地了解并使用 restful api
进行增删改查文档、了解集群状态、分析分词效果等。
访问 kibana 开发工具控制台 http://localhost:5601/app/dev_tools#/console
基本restful操作api
GET /_cat/indices
# https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html
# 删除索引
DELETE /china_city
# 写文档,自动生成索引
POST china_people/_doc/1
{
"id":1,
"province":"北京",
"city":"北京",
"name":"张三",
"message":"Happy Morning",
"location":{
"lat":"39.90710271",
"lon":"116.39568329"
}
}
POST china_people/_doc/2
{
"id":2,
"province":"广东",
"city":"深圳",
"name":"李四",
"messgae":"Happy Birthday",
"location":{
"lat":"22.56709771",
"lon":"114.08477783"
}
}
# 查询索引文档
GET china_people/_search
GET china_people/_doc/2
GET china_people/_source/2
# 查询文档结构
GET china_people/_mapping
# 根据查询结果更新文档
POST china_people/_update_by_query
{
"script": {
"source": "ctx._source.province=params.province;ctx._source.city=params.city",
"lang": "painless",
"params": {
"province":"广东",
"city":"ShenZhen"
}
},
"query":{
"match": {
"city": "深圳"
}
}
}
# 批量写入文档
POST _bulk
{"index": {"_index": "china_people","_id":"3"}}
{"id":"3", "province":"上海", "city":"上海", "name":"精神小伙","message":"Birthday Happy","location":{"lat":"31.25976999","lon":"121.45385742"}}
{"index": {"_index": "china_people","_id":"4"}}
{"id":"4", "province":"湖北", "city":"武汉", "name":"有志青年", "message":"你好,武汉","location":{"lat":"30.6095498","lon":"114.29626465"}}
{"index": {"_index": "china_people","_id":"5"}}
{"id":"5", "province":"广东", "city":"深圳","name":"国之栋梁", "message":"世界之都","location":{"lat":"22.56709776","lon":"114.08477784"}}
DELETE china_people
# 设置分片为1
PUT china_people
{
"settings": {
"number_of_shards": 1
}
}
GET china_people/_settings
GET china_people/_mapping
PUT china_people/_mapping
{
"properties" : {
"city" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"location" : {
"type":"geo_point"
},
"message" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"province" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
## 搜索
GET china_people/_search
{
"query": {
"match": {
"message": "栋梁"
}
}
}
## 组合搜索
GET china_people/_search
{
"query": {
"bool": {
"must": [
{"match": {
"province": "广东"
}},
{
"match": {
"name": "李四"
}
}
]
}
}
}
# 不是广东的
GET china_people/_search
{
"query": {
"bool": {"must_not": [
{"match": {
"province": "广东"
}}
]}
}
}
GET china_people/_search
{
"query": {
"bool": {"should": [
{"match": {
"province": "广东"
}},
{
"match": {
"province.keyword": "北京"
}
}
]}
}
}
GET china_people/_count
{
"query": {
"bool": {"should": [
{"match": {
"province": "广东"
}},
{
"match": {
"province.keyword": "北京"
}
}
]}
}
}
# 地理位置查询
GET china_people/_search
{
"query": {
"bool": {"must": [
{
"match": {
"province.keyword": "北京"
}
}
]}
},
"post_filter": {
"geo_distance": {
"distance": "40km",
"location": {
"lat": "39.90710271",
"lon": "116"
}
}
}
}
# 分词分析
GET _analyze
{
"text": "Happy.Birthday",
"analyzer": "simple"
}
# 默认分词器,空格分隔
GET _analyze
{
"text": "Happy.Birthday",
"analyzer": "standard"
}
# letter 遇到不为字母的符号就分割
GET _analyze
{
"text": ["Happy.Birthday"],
"tokenizer": "letter",
"filter": ["lowercase"]
}