温馨提示:本文所有API操作都是基于Elasticsearch 7.17 .8版本
1、文档的基本 CRUD 与批量操作
############Create Document############
#create document. 自动生成 _id
POST users/_doc
{"user" : "Mike","post_date" : "2019-04-15T14:12:12","message" : "trying out Kibana"
}#create document. 指定Id。如果id已经存在,报错
PUT users/_doc/1?op_type=create
{"user" : "Jack","post_date" : "2019-05-15T14:12:12","message" : "trying out Elasticsearch"
}#create document. 指定 ID 如果已经存在,就报错
PUT users/_create/1
{"user" : "Jack","post_date" : "2019-05-15T14:12:12","message" : "trying out Elasticsearch"
}### Get Document by ID
#Get the document by ID
GET users/_doc/1### Index & Update
#Update 指定 ID (先删除,在写入)
GET users/_doc/1PUT users/_doc/1
{"user" : "Mike"}#GET users/_doc/1
#在原文档上增加字段
POST users/_update/1/
{"doc":{"post_date" : "2019-05-15T14:12:12","message" : "trying out Elasticsearch"}
}### Delete by Id
# 删除文档
DELETE users/_doc/1### Bulk 操作
#执行两次,查看每次的结果#执行第1次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }#执行第2次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }### mget 操作
GET /_mget
{"docs" : [{"_index" : "test","_id" : "1"},{"_index" : "test","_id" : "2"}]
}#URI中指定index
GET /test/_mget
{"docs" : [{"_id" : "1"},{"_id" : "2"}]
}GET /_mget
{"docs" : [{"_index" : "test","_id" : "1","_source" : false},{"_index" : "test","_id" : "2","_source" : ["field3", "field4"]},{"_index" : "test","_id" : "3","_source" : {"include": ["user"],"exclude": ["user.location"]}}]
}### msearch 操作
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}### 清除测试数据
#清除数据
DELETE users
DELETE test
DELETE test2
2、使用分析器进行分词
#Simple Analyzer – 按照非字母切分(符号被过滤),小写处理
#Stop Analyzer – 小写处理,停用词过滤(the,a,is)
#Whitespace Analyzer – 按照空格切分,不转小写
#Keyword Analyzer – 不分词,直接将输入当作输出
#Patter Analyzer – 正则表达式,默认 \W+ (非字符分隔)
#Language – 提供了30多种常见语言的分词器
#2 running Quick brown-foxes leap over lazy dogs in the summer evening#查看不同的analyzer的效果
#standard
GET _analyze
{"analyzer": "standard","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}#simpe
GET _analyze
{"analyzer": "simple","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}GET _analyze
{"analyzer": "stop","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}#stop
GET _analyze
{"analyzer": "whitespace","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}#keyword
GET _analyze
{"analyzer": "keyword","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}GET _analyze
{"analyzer": "pattern","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}#english
GET _analyze
{"analyzer": "english","text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}POST _analyze
{"analyzer": "icu_analyzer","text": "他说的确实在理”"
}POST _analyze
{"analyzer": "standard","text": "他说的确实在理”"
}POST _analyze
{"analyzer": "icu_analyzer","text": "这个苹果不大好吃"
}
3、URI Search详解
#基本查询
GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s#带profile
GET /movies/_search?q=2012&df=title
{"profile":"true"
}#泛查询,正对_all,所有字段
GET /movies/_search?q=2012
{"profile":"true"
}#指定字段
GET /movies/_search?q=title:2012&sort=year:desc&from=0&size=10&timeout=1s
{"profile":"true"
}# 查找美丽心灵, Mind为泛查询
GET /movies/_search?q=title:Beautiful Mind
{"profile":"true"
}# 泛查询
GET /movies/_search?q=title:2012
{"profile":"true"
}#使用引号,Phrase查询
GET /movies/_search?q=title:"Beautiful Mind"
{"profile":"true"
}#分组,Bool查询
GET /movies/_search?q=title:(Beautiful Mind)
{"profile":"true"
}#布尔操作符
# 查找美丽心灵
GET /movies/_search?q=title:(Beautiful AND Mind)
{"profile":"true"
}# 查找美丽心灵
GET /movies/_search?q=title:(Beautiful NOT Mind)
{"profile":"true"
}# 查找美丽心灵
GET /movies/_search?q=title:(Beautiful %2BMind)
{"profile":"true"
}#范围查询 ,区间写法
GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018%7D
{"profile":"true"
}#通配符查询
GET /movies/_search?q=title:b*
{"profile":"true"
}//模糊匹配&近似度匹配
GET /movies/_search?q=title:beautifl~1
{"profile":"true"
}GET /movies/_search?q=title:"Lord Rings"~2
{"profile":"true"
}
4、Request Body 与 Query DSL
#ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错
#查询movies分页
POST /movies,404_idx/_search?ignore_unavailable=true
{"profile": true,"query": {"match_all": {}}
}POST /kibana_sample_data_ecommerce/_search
{"from":10,"size":20,"query":{"match_all": {}}
}#对日期排序
POST kibana_sample_data_ecommerce/_search
{"sort":[{"order_date":"desc"}],"query":{"match_all": {}}}#source filtering
POST kibana_sample_data_ecommerce/_search
{"_source":["order_date"],"query":{"match_all": {}}
}#脚本字段
GET kibana_sample_data_ecommerce/_search
{"script_fields": {"new_field": {"script": {"lang": "painless","source": "doc['order_date'].value+'hello'"}}},"query": {"match_all": {}}
}POST movies/_search
{"query": {"match": {"title": "last christmas"}}
}POST movies/_search
{"query": {"match": {"title": {"query": "last christmas","operator": "and"}}}
}POST movies/_search
{"query": {"match_phrase": {"title":{"query": "one love"}}}
}POST movies/_search
{"query": {"match_phrase": {"title":{"query": "one love","slop": 1}}}
}
5、Query & Simple Query String Query
PUT /users/_doc/1
{"name":"Ruan Yiming","about":"java, golang, node, swift, elasticsearch"
}PUT /users/_doc/2
{"name":"Li Yiming","about":"Hadoop"
}POST users/_search
{"query": {"query_string": {"default_field": "name","query": "Ruan AND Yiming"}}
}POST users/_search
{"query": {"query_string": {"fields":["name","about"],"query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)"}}
}#Simple Query 默认的operator是 Or
POST users/_search
{"query": {"simple_query_string": {"query": "Ruan AND Yiming","fields": ["name"]}}
}POST users/_search
{"query": {"simple_query_string": {"query": "Ruan Yiming","fields": ["name"],"default_operator": "AND"}}
}GET /movies/_search
{"profile": true,"query":{"query_string":{"default_field": "title","query": "Beafiful AND Mind"}}
}# 多fields
GET /movies/_search
{"profile": true,"query":{"query_string":{"fields":["title","year"],"query": "2012"}}
}GET /movies/_search
{"profile":true,"query":{"simple_query_string":{"query":"Beautiful +mind","fields":["title"]}}
}
6、Dynamic Mapping 和常见字段类型
#写入文档,查看 Mapping
PUT mapping_test/_doc/1
{"firstName":"Chan","lastName": "Jackie","loginDate":"2018-07-24T10:29:48.103Z"
}#查看 Mapping文件
GET mapping_test/_mapping#Delete index
DELETE mapping_test#dynamic mapping,推断字段的类型
PUT mapping_test/_doc/1
{"uid" : "123","isVip" : false,"isAdmin": "true","age":19,"heigh":180
}#查看 Dynamic
GET mapping_test/_mapping#默认Mapping支持dynamic,写入的文档中加入新的字段
PUT dynamic_mapping_test/_doc/1
{"newField":"someValue"
}#该字段可以被搜索,数据也在_source中出现
POST dynamic_mapping_test/_search
{"query":{"match":{"newField":"someValue"}}
}#修改为dynamic false
PUT dynamic_mapping_test/_mapping
{"dynamic": false
}#新增 anotherField
PUT dynamic_mapping_test/_doc/10
{"anotherField":"someValue"
}#该字段不可以被搜索,因为dynamic已经被设置为false
POST dynamic_mapping_test/_search
{"query":{"match":{"anotherField":"someValue"}}
}get dynamic_mapping_test/_doc/10#修改为strict
PUT dynamic_mapping_test/_mapping
{"dynamic": "strict"
}#写入数据出错,HTTP Code 400
PUT dynamic_mapping_test/_doc/12
{"lastField":"value"
}DELETE dynamic_mapping_test
7、显式Mapping设置与常见参数介绍
#设置 index 为 false
DELETE users
PUT users
{"mappings" : {"properties" : {"firstName" : {"type" : "text"},"lastName" : {"type" : "text"},"mobile" : {"type" : "text","index": false}}}
}PUT users/_doc/1
{"firstName":"Ruan","lastName": "Yiming","mobile": "12345678"
}POST /users/_search
{"query": {"match": {"mobile":"12345678"}}
}#设定Null_valueDELETE users
PUT users
{"mappings" : {"properties" : {"firstName" : {"type" : "text"},"lastName" : {"type" : "text"},"mobile" : {"type" : "keyword","null_value": "NULL"}}}
}PUT users/_doc/1
{"firstName":"Ruan","lastName": "Yiming","mobile": null
}PUT users/_doc/2
{"firstName":"Ruan2","lastName": "Yiming2"}GET users/_search
{"query": {"match": {"mobile":"NULL"}}}#设置 Copy to
DELETE users
PUT users
{"mappings": {"properties": {"firstName":{"type": "text","copy_to": "fullName"},"lastName":{"type": "text","copy_to": "fullName"}}}
}
PUT users/_doc/1
{"firstName":"Ruan","lastName": "Yiming"
}GET users/_search?q=fullName:(Ruan Yiming)POST users/_search
{"query": {"match": {"fullName":{"query": "Ruan Yiming","operator": "and"}}}
}#数组类型
PUT users/_doc/1
{"name":"onebird","interests":"reading"
}PUT users/_doc/1
{"name":"twobirds","interests":["reading","music"]
}POST users/_search
{"query": {"match_all": {}}
}GET users/_mapping
8、多字段特性及Mapping中配置自定义Analyzer
PUT logs/_doc/1
{"level":"DEBUG"}GET /logs/_mappingPOST _analyze
{"tokenizer":"keyword","char_filter":["html_strip"],"text": "<b>hello world</b>"
}POST _analyze
{"tokenizer":"path_hierarchy","text":"/user/ymruan/a/b/c/d/e"
}#使用char filter进行替换
POST _analyze
{"tokenizer": "standard","char_filter": [{"type" : "mapping","mappings" : [ "- => _"]}],"text": "123-456, I-test! test-990 650-555-1234"
}//char filter 替换表情符号
POST _analyze
{"tokenizer": "standard","char_filter": [{"type" : "mapping","mappings" : [ ":) => happy", ":( => sad"]}],"text": ["I am felling :)", "Feeling :( today"]
}// white space and snowball
GET _analyze
{"tokenizer": "whitespace","filter": ["stop","snowball"],"text": ["The gilrs in China are playing this game!"]
}// whitespace与stop
GET _analyze
{"tokenizer": "whitespace","filter": ["stop","snowball"],"text": ["The rain in Spain falls mainly on the plain."]
}//remove 加入lowercase后,The被当成 stopword删除
GET _analyze
{"tokenizer": "whitespace","filter": ["lowercase","stop","snowball"],"text": ["The gilrs in China are playing this game!"]
}//正则表达式
GET _analyze
{"tokenizer": "standard","char_filter": [{"type" : "pattern_replace","pattern" : "http://(.*)","replacement" : "$1"}],"text" : "http://www.elastic.co"
}
9、Dynamic Template和Index Template10、
#数字字符串被映射成text,日期字符串被映射成日期
PUT ttemplate/_doc/1
{"someNumber":"1","someDate":"2019/01/01"
}
GET ttemplate/_mapping#Create a default template
PUT _template/template_default
{"index_patterns": ["*"],"order" : 0,"version": 1,"settings": {"number_of_shards": 1,"number_of_replicas":1}
}PUT /_template/template_test
{"index_patterns" : ["test*"],"order" : 1,"settings" : {"number_of_shards": 1,"number_of_replicas" : 2},"mappings" : {"date_detection": false,"numeric_detection": true}
}#查看template信息
GET /_template/template_default
GET /_template/temp*#写入新的数据,index以test开头
PUT testtemplate/_doc/1
{"someNumber":"1","someDate":"2019/01/01"
}
GET testtemplate/_mapping
get testtemplate/_settingsPUT testmy
{"settings":{"number_of_replicas":5}
}put testmy/_doc/1
{"key":"value"
}get testmy/_settings
DELETE testmy
DELETE /_template/template_default
DELETE /_template/template_test#Dynaminc Mapping 根据类型和字段名
DELETE my_indexPUT my_index/_doc/1
{"firstName":"Ruan","isVIP":"true"
}GET my_index/_mapping
DELETE my_index
PUT my_index
{"mappings": {"dynamic_templates": [{"strings_as_boolean": {"match_mapping_type": "string","match":"is*","mapping": {"type": "boolean"}}},{"strings_as_keywords": {"match_mapping_type": "string","mapping": {"type": "keyword"}}}]}
}DELETE my_index
#结合路径
PUT my_index
{"mappings": {"dynamic_templates": [{"full_name": {"path_match": "name.*","path_unmatch": "*.middle","mapping": {"type": "text","copy_to": "full_name"}}}]}
}PUT my_index/_doc/1
{"name": {"first": "John","middle": "Winston","last": "Lennon"}
}GET my_index/_search?q=full_name:John
10、基于词项和基于全文的搜索
DELETE products
PUT products
{"settings": {"number_of_shards": 1}
}POST /products/_bulk
{ "index": { "_id": 1 }}
{ "productID" : "XHDK-A-1293-#fJ3","desc":"iPhone" }
{ "index": { "_id": 2 }}
{ "productID" : "KDKE-B-9947-#kL5","desc":"iPad" }
{ "index": { "_id": 3 }}
{ "productID" : "JODL-X-1937-#pV7","desc":"MBP" }GET /productsPOST /products/_search
{"query": {"term": {"desc": {//"value": "iPhone""value":"iphone"}}}
}POST /products/_search
{"query": {"term": {"desc.keyword": {//"value": "iPhone"//"value":"iphone"}}}
}POST /products/_search
{"query": {"term": {"productID": {"value": "XHDK-A-1293-#fJ3"}}}
}POST /products/_search
{//"explain": true,"query": {"term": {"productID.keyword": {"value": "XHDK-A-1293-#fJ3"}}}
}POST /products/_search
{"explain": true,"query": {"constant_score": {"filter": {"term": {"productID.keyword": "XHDK-A-1293-#fJ3"}}}}
}#设置 position_increment_gap
DELETE groups
PUT groups
{"mappings": {"properties": {"names":{"type": "text","position_increment_gap": 0}}}
}GET groups/_mappingPOST groups/_doc
{"names": [ "John Water", "Water Smith"]
}POST groups/_search
{"query": {"match_phrase": {"names": {"query": "Water Water","slop": 100}}}
}POST groups/_search
{"query": {"match_phrase": {"names": "Water Smith"}}
}
11、结构化搜索
#结构化搜索,精确匹配
DELETE products
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }GET products/_mapping#对布尔值 match 查询,有算分
POST products/_search
{"profile": "true","explain": true,"query": {"term": {"avaliable": true}}
}#对布尔值,通过constant score 转成 filtering,没有算分
POST products/_search
{"profile": "true","explain": true,"query": {"constant_score": {"filter": {"term": {"avaliable": true}}}}
}#数字类型 Term
POST products/_search
{"profile": "true","explain": true,"query": {"term": {"price": 30}}
}#数字类型 terms
POST products/_search
{"query": {"constant_score": {"filter": {"terms": {"price": ["20","30"]}}}}
}#数字 Range 查询
GET products/_search
{"query" : {"constant_score" : {"filter" : {"range" : {"price" : {"gte" : 20,"lte" : 30}}}}}
}# 日期 range
POST products/_search
{"query" : {"constant_score" : {"filter" : {"range" : {"date" : {"gte" : "now-1y"}}}}}
}#exists查询
POST products/_search
{"query": {"constant_score": {"filter": {"exists": {"field": "date"}}}}
}#处理多值字段
POST /movies/_bulk
{ "index": { "_id": 1 }}
{ "title" : "Father of the Bridge Part II","year":1995, "genre":"Comedy"}
{ "index": { "_id": 2 }}
{ "title" : "Dave","year":1993,"genre":["Comedy","Romance"] }#处理多值字段,term 查询是包含,而不是等于
POST movies/_search
{"query": {"constant_score": {"filter": {"term": {"genre.keyword": "Comedy"}}}}
}#字符类型 terms
POST products/_search
{"query": {"constant_score": {"filter": {"terms": {"productID.keyword": ["QQPX-R-3956-#aD8","JODL-X-1937-#pV7"]}}}}
}POST products/_search
{"profile": "true","explain": true,"query": {"match": {"price": 30}}
}POST products/_search
{"profile": "true","explain": true,"query": {"term": {"date": "2019-01-01"}}
}POST products/_search
{"profile": "true","explain": true,"query": {"match": {"date": "2019-01-01"}}
}POST products/_search
{"profile": "true","explain": true,"query": {"constant_score": {"filter": {"term": {"productID.keyword": "XHDK-A-1293-#fJ3"}}}}
}POST products/_search
{"profile": "true","explain": true,"query": {"term": {"productID.keyword": "XHDK-A-1293-#fJ3"}}
}#对布尔数值
POST products/_search
{"query": {"constant_score": {"filter": {"term": {"avaliable": "false"}}}}
}POST products/_search
{"query": {"term": {"avaliable": {"value": "false"}}}
}POST products/_search
{"profile": "true","explain": true,"query": {"term": {"price": {"value": "20"}}}
}POST products/_search
{"profile": "true","explain": true,"query": {"match": {"price": "20"}}}
}POST products/_search
{"query": {"constant_score": {"filter": {"bool": {"must_not": {"exists": {"field": "date"}}}}}}
}
12、搜索的相关性算分
PUT testscore
{"settings": {"number_of_shards": 1},"mappings": {"properties": {"content": {"type": "text"}}}
}PUT testscore/_bulk
{ "index": { "_id": 1 }}
{ "content":"we use Elasticsearch to power the search" }
{ "index": { "_id": 2 }}
{ "content":"we like elasticsearch" }
{ "index": { "_id": 3 }}
{ "content":"The scoring of documents is caculated by the scoring formula" }
{ "index": { "_id": 4 }}
{ "content":"you know, for search" }POST /testscore/_search
{//"explain": true,"query": {"match": {"content":"you"//"content": "elasticsearch"//"content":"the"//"content": "the elasticsearch"}}
}POST testscore/_search
{"query": {"boosting" : {"positive" : {"term" : {"content" : "elasticsearch"}},"negative" : {"term" : {"content" : "like"}},"negative_boost" : 0.2}}
}POST tmdb/_search
{"_source": ["title","overview"],"query": {"more_like_this": {"fields": ["title^10","overview"],"like": [{"_id":"14191"}],"min_term_freq": 1,"max_query_terms": 12}}
}
13、Query & Filtering 与多字符串多字段查询
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }#基本语法
POST /products/_search
{"query": {"bool" : {"must" : {"term" : { "price" : "30" }},"filter": {"term" : { "avaliable" : "true" }},"must_not" : {"range" : {"price" : { "lte" : 10 }}},"should" : [{ "term" : { "productID.keyword" : "JODL-X-1937-#pV7" } },{ "term" : { "productID.keyword" : "XHDK-A-1293-#fJ3" } }],"minimum_should_match" :1}}
}#改变数据模型,增加字段。解决数组包含而不是精确匹配的问题
POST /newmovies/_bulk
{ "index": { "_id": 1 }}
{ "title" : "Father of the Bridge Part II","year":1995, "genre":"Comedy","genre_count":1 }
{ "index": { "_id": 2 }}
{ "title" : "Dave","year":1993,"genre":["Comedy","Romance"],"genre_count":2 }#must,有算分
POST /newmovies/_search
{"query": {"bool": {"must": [{"term": {"genre.keyword": {"value": "Comedy"}}},{"term": {"genre_count": {"value": 1}}}]}}
}#Filter。不参与算分,结果的score是0
POST /newmovies/_search
{"query": {"bool": {"filter": [{"term": {"genre.keyword": {"value": "Comedy"}}},{"term": {"genre_count": {"value": 1}}}]}}
}#Filtering Context
POST _search
{"query": {"bool" : {"filter": {"term" : { "avaliable" : "true" }},"must_not" : {"range" : {"price" : { "lte" : 10 }}}}}
}#Query Context
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }POST /products/_search
{"query": {"bool": {"should": [{"term": {"productID.keyword": {"value": "JODL-X-1937-#pV7"}}},{"term": {"avaliable": {"value": true}}}]}}
}#嵌套,实现了 should not 逻辑
POST /products/_search
{"query": {"bool": {"must": {"term": {"price": "30"}},"should": [{"bool": {"must_not": {"term": {"avaliable": "false"}}}}],"minimum_should_match": 1}}
}#Controll the Precision
POST _search
{"query": {"bool" : {"must" : {"term" : { "price" : "30" }},"filter": {"term" : { "avaliable" : "true" }},"must_not" : {"range" : {"price" : { "lte" : 10 }}},"should" : [{ "term" : { "productID.keyword" : "JODL-X-1937-#pV7" } },{ "term" : { "productID.keyword" : "XHDK-A-1293-#fJ3" } }],"minimum_should_match" :2}}
}POST /animals/_search
{"query": {"bool": {"should": [{ "term": { "text": "brown" }},{ "term": { "text": "red" }},{ "term": { "text": "quick" }},{ "term": { "text": "dog" }}]}}
}POST /animals/_search
{"query": {"bool": {"should": [{ "term": { "text": "quick" }},{ "term": { "text": "dog" }},{"bool":{"should":[{ "term": { "text": "brown" }},{ "term": { "text": "brown" }},]}}]}}
}DELETE blogs
POST /blogs/_bulk
{ "index": { "_id": 1 }}
{"title":"Apple iPad", "content":"Apple iPad,Apple iPad" }
{ "index": { "_id": 2 }}
{"title":"Apple iPad,Apple iPad", "content":"Apple iPad" }POST blogs/_search
{"query": {"bool": {"should": [{"match": {"title": {"query": "apple,ipad","boost": 1.1}}},{"match": {"content": {"query": "apple,ipad","boost":}}}]}}
}DELETE news
POST /news/_bulk
{ "index": { "_id": 1 }}
{ "content":"Apple Mac" }
{ "index": { "_id": 2 }}
{ "content":"Apple iPad" }
{ "index": { "_id": 3 }}
{ "content":"Apple employee like Apple Pie and Apple Juice" }POST news/_search
{"query": {"bool": {"must": {"match":{"content":"apple"}}}}
}POST news/_search
{"query": {"bool": {"must": {"match":{"content":"apple"}},"must_not": {"match":{"content":"pie"}}}}
}POST news/_search
{"query": {"boosting": {"positive": {"match": {"content": "apple"}},"negative": {"match": {"content": "pie"}},"negative_boost": 0.5}}
}
14、单字符串多字段查询:Dis Max Query
PUT /blogs/_doc/1
{"title": "Quick brown rabbits","body": "Brown rabbits are commonly seen."
}PUT /blogs/_doc/2
{"title": "Keeping pets healthy","body": "My quick brown fox eats rabbits on a regular basis."
}POST /blogs/_search
{"query": {"bool": {"should": [{ "match": { "title": "Brown fox" }},{ "match": { "body": "Brown fox" }}]}}
}POST blogs/_search
{"query": {"dis_max": {"queries": [{ "match": { "title": "Quick pets" }},{ "match": { "body": "Quick pets" }}]}}
}POST blogs/_search
{"query": {"dis_max": {"queries": [{ "match": { "title": "Quick pets" }},{ "match": { "body": "Quick pets" }}],"tie_breaker": 0.2}}
}
15、单字符串多字段查询:Multi Match
POST blogs/_search
{"query": {"dis_max": {"queries": [{ "match": { "title": "Quick pets" }},{ "match": { "body": "Quick pets" }}],"tie_breaker": 0.2}}
}POST blogs/_search
{"query": {"multi_match": {"type": "best_fields","query": "Quick pets","fields": ["title","body"],"tie_breaker": 0.2,"minimum_should_match": "20%"}}
}POST books/_search
{"multi_match": {"query": "Quick brown fox","fields": "*_title"}
}POST books/_search
{"multi_match": {"query": "Quick brown fox","fields": [ "*_title", "chapter_title^2" ]}
}DELETE /titles
PUT /titles
{"settings": { "number_of_shards": 1 },"mappings": {"my_type": {"properties": {"title": {"type": "string","analyzer": "english","fields": {"std": {"type": "string","analyzer": "standard"}}}}}}
}PUT /titles
{"mappings": {"properties": {"title": {"type": "text","analyzer": "english"}}}
}POST titles/_bulk
{ "index": { "_id": 1 }}
{ "title": "My dog barks" }
{ "index": { "_id": 2 }}
{ "title": "I see a lot of barking dogs on the road " }GET titles/_search
{"query": {"match": {"title": "barking dogs"}}
}DELETE /titles
PUT /titles
{"mappings": {"properties": {"title": {"type": "text","analyzer": "english","fields": {"std": {"type": "text","analyzer": "standard"}}}}}
}POST titles/_bulk
{ "index": { "_id": 1 }}
{ "title": "My dog barks" }
{ "index": { "_id": 2 }}
{ "title": "I see a lot of barking dogs on the road " }GET /titles/_search
{"query": {"multi_match": {"query": "barking dogs","type": "most_fields","fields": [ "title", "title.std" ]}}
}GET /titles/_search
{"query": {"multi_match": {"query": "barking dogs","type": "most_fields","fields": [ "title^10", "title.std" ]}}
}
16、多语言及中文分词与检索
#stop wordDELETE my_index
PUT /my_index/_doc/1
{ "title": "I'm happy for this fox" }PUT /my_index/_doc/2
{ "title": "I'm not happy about my fox problem" }POST my_index/_search
{"query": {"match": {"title": "not happy fox"}}
}#虽然通过使用 english (英语)分析器,使得匹配规则更加宽松,我们也因此提高了召回率,但却降低了精准匹配文档的能力。为了获得两方面的优势,我们可以使用multifields(多字段)对 title 字段建立两次索引: 一次使用 `english`(英语)分析器,另一次使用 `standard`(标准)分析器:DELETE my_indexPUT /my_index
{"mappings": {"blog": {"properties": {"title": {"type": "string","analyzer": "english"}}}}
}PUT /my_index
{"mappings": {"blog": {"properties": {"title": {"type": "string","fields": {"english": {"type": "string","analyzer": "english"}}}}}}
}PUT /my_index/blog/1
{ "title": "I'm happy for this fox" }PUT /my_index/blog/2
{ "title": "I'm not happy about my fox problem" }GET /_search
{"query": {"multi_match": {"type": "most_fields","query": "not happy foxes","fields": [ "title", "title.english" ]}}
}#安装插件
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
#安装插件
bin/elasticsearch install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.1.0/elasticsearch-analysis-hanlp-7.1.0.zip#ik_max_word
#ik_smart
#hanlp: hanlp默认分词
#hanlp_standard: 标准分词
#hanlp_index: 索引分词
#hanlp_nlp: NLP分词
#hanlp_n_short: N-最短路分词
#hanlp_dijkstra: 最短路分词
#hanlp_crf: CRF分词(在hanlp 1.6.6已开始废弃)
#hanlp_speed: 极速词典分词POST _analyze
{"analyzer": "hanlp_standard","text": ["剑桥分析公司多位高管对卧底记者说,他们确保了唐纳德·特朗普在总统大选中获胜"]} #Pinyin
PUT /artists/
{"settings" : {"analysis" : {"analyzer" : {"user_name_analyzer" : {"tokenizer" : "whitespace","filter" : "pinyin_first_letter_and_full_pinyin_filter"}},"filter" : {"pinyin_first_letter_and_full_pinyin_filter" : {"type" : "pinyin","keep_first_letter" : true,"keep_full_pinyin" : false,"keep_none_chinese" : true,"keep_original" : false,"limit_first_letter_length" : 16,"lowercase" : true,"trim_whitespace" : true,"keep_none_chinese_in_first_letter" : true}}}}
}GET /artists/_analyze
{"text": ["刘德华 张学友 郭富城 黎明 四大天王"],"analyzer": "user_name_analyzer"
}