1. 概述
之前聊了Elasticsearch(ES)的高階搜尋(DSL搜尋)的一部分內容,今天把剩下的部分聊完。
2. 場景說明
2.1 建立索引同時建立對映
PUT http://192.168.1.11:9200/index_user
引數:
{ "settings":{ "index":{ "number_of_shards":5, "number_of_replicas":0 } }, "mappings" : { "properties":{ "user_id":{ "type":"long" }, "name":{ "type":"text", "analyzer":"ik_max_word" }, "login_name":{ "type":"keyword" }, "age":{ "type":"integer" }, "birthday":{ "type":"date" }, "desc":{ "type":"text", "analyzer":"ik_max_word" }, "head_url":{ "type":"text", "index":false } } } }
2.2 建立文件
此處只舉幾個例子
POST http://192.168.1.11:9200/index_user/_doc/1
引數:
{ "user_id":"1", "name":"殭屍獵手", "login_name":"jsls", "age":25, "birthday":"1990-03-01", "desc":"我是一名房產經紀人,現在轉行了,目前是一名運輸工人", "head_url":"https://www.zhuifengren.cn/img/jsls.jpg" }
POST http://192.168.1.11:9200/index_user/_doc/2
引數:
{ "user_id":"2", "name":"夏維爾", "login_name":"xwe", "age":28, "birthday":"1992-06-06", "desc":"我是一名高階開發經理,每天坐地鐵上班,在北京住,從不堵車", "head_url":"https://www.zhuifengren.cn/img/xwe.jpg" }
POST http://192.168.1.11:9200/index_user/_doc/3
引數:
{ "user_id":"3", "name":"迪士尼在逃仙柔", "login_name":"dsnzxr", "age":10, "birthday":"2011-06-22", "desc":"我是一名五年級的小學生,每天專車接專車送,中午在學校入夥,食堂菜可好了,上學期期末考試我拿了三好學生獎", "head_url":"https://www.zhuifengren.cn/img/dsnzxr.jpg" }
……………………
3. 高階搜尋(DSL搜尋)(下篇)
3.1 布林查詢
引數中可以包含多種條件的組合。
其中 must 塊下的條件,文件必須都符合才會被查出來。
must_not 塊下的條件,文件必須都不符合才會被查出來。
should 塊下的條件,文件只要符合一個就能被查出來。
最終結果集是 must、must_not、should 塊查詢結果的交集。
POST http://192.168.1.11:9200/index_user/_doc/_search
引數:
{ "query": { "bool": { "must": [ { "match": { "desc": "一名" } }, { "match": { "desc": "小學生" } } ], "must_not": [], "should": [ { "match": { "desc": "一名" } }, { "match": { "desc": "小學生" } } ] } } }
3.2 布林查詢,為某個查詢加權
命中加權查詢項的文件,分數會提高
POST http://192.168.1.11:9200/index_user/_doc/_search
引數:
{ "query": { "bool": { "should": [ { "match": { "desc": { "query": "一名", "boost":10 } } }, { "match": { "desc": "小學生" } } ] } } }
3.3 結果集過濾
從ES查詢後,再將結果集過濾一次。
支援範圍查詢:
gte:大於等於
lte:小於等於
gt:大於
lt:小於
也支援 term、match 操作。
POST http://192.168.1.11:9200/index_user/_doc/_search
引數:
{ "query":{ "match":{ "desc":"一名" } }, "post_filter": { "range" : { "age": { "gt":10, "lt":26 } } } }
3.4 自定義排序
文字型別的欄位,只能對keyword型別的文字欄位排序,text型別的不能用於排序。
文字型別欄位定義時,可以既是text型別,又是keyword型別,排序時使用 欄位.keyword 進行排序。
POST http://192.168.1.11:9200/index_user/_doc/_search
引數:
{ "query":{ "match":{ "desc":"一名" } }, "sort":[ { "age":"desc" }, { "user_id":"asc" }, { "login_name":"asc" } ] }
3.5 高亮
高亮效果就是在匹配的關鍵字上增加標籤,便於前端去高亮顯示。
POST http://192.168.1.11:9200/index_user/_doc/_search
引數:
{ "query":{ "match":{ "desc":"一名小學生" } }, "highlight":{ "pre_tags":"<span>", "post_tags":"</span>", "fields":{ "desc":{} } } }
4. 綜述
今天簡單聊了一下 Elasticsearch(ES)的高階搜尋(DSL搜尋)剩下的部分,希望可以對大家的工作有所幫助。
歡迎幫忙點贊、評論、加關注 :)
關注追風人聊Java,每天更新Java乾貨。