Query DSL(Domain Specific Language)
1 查詢上下文
? 使用query關鍵字進行檢索,傾向于相關度搜索,故需要計算評分。搜索是Elasticsearch最關鍵和重要的部分。
2 相關度評分:_score
? 概念:相關度評分用于對搜索結果排序,評分越高則認為其結果和搜索的預期值相關度越高,即越符合搜索預期值。在7.x之前相關度評分默認使用TF/IDF算法計算而來,7.x之后默認為BM25。
? 排序:相關度評分為搜索結果的排序依據(jù),默認情況下評分越高,則結果越靠前。
3 元數(shù)據(jù):_source
禁用_source:
好處:節(jié)省存儲開銷
壞處:
不支持update、updatebyquery和reindex API。
不支持高亮。
不支持reindex、更改mapping分析器和版本升級。
通過查看索引時使用的原始文檔來調試查詢或聚合的功能。
將來有可能自動修復索引損壞。
總結:如果只是為了節(jié)省磁盤,可以壓縮索引比禁用_source更好。
數(shù)據(jù)源過濾器:
Excluding:結果中不要返回哪些field,不返回的field不代表不能通過該字段進行檢索,因為元數(shù)據(jù)不存在不代表索引不存在
在mapping中定義過濾:支持通配符,但是這種方式不推薦,因為mapping不可變
console PUT product { “mappings”: { “_source”: { “includes”: [ “name”, “price” ], “excludes”: [ “desc”, “tags” ] } } }
常用過濾規(guī)則
“_source”: “false”,
“_source”: “obj.",
“_source”: [ "obj1.”, “obj2." ],
“_source”: { “includes”: [ "obj1.”, “obj2." ], “excludes”: [ ".description” ] }
4 Query String
查詢所有:
GET /product/_search
帶參數(shù):
GET /product/_search?q=name:xiaomi
分頁:
GET /product/_search?from=0&size=2&sort=price:asc
精準匹配 exact value
GET /product/_search?q=date:2021-06-01
_all搜索 相當于在所有有索引的字段中檢索
GET /product/_search?q=2021-06-01
DELETE product # 驗證_all搜索 PUT product { “mappings”: { “properties”: { “desc”: { “type”: “text”, “index”: false } } } } # 先初始化數(shù)據(jù) POST /product/_update/5 { “doc”: { “desc”: “erji zhong de kendeji 2021-06-01” } }
5 全文檢索-Fulltext query
GET index/_search { “query”: { *** } }
match:匹配包含某個term的子句 —模糊查詢
match_all:匹配所有結果的子句
multi_match:多字段條件
match_phrase:短語查詢 —精確匹配
6 精準查詢-Term query
term:匹配和搜索詞項完全相等的結果
term和match_phrase區(qū)別:
matchphrase 會將檢索關鍵詞分詞, matchphrase的分詞結果必須在被檢索字段的分詞中都包含,而且順序必須相同,而且默認必須都是連續(xù)的
term是將傳入的文本原封不動地(不分詞)拿去查詢。
term和keyword區(qū)別
term是對于搜索詞不分詞,
keyword是字段類型,是對于source data中的字段值不分詞
terms:匹配和搜索詞項列表中任意項匹配的結果
range:范圍查找
match用于進行模糊匹配,會對輸入進行分詞處理后再去查詢,部分命中的結果也會按照評分由高到低顯示出來。
7 過濾器-Filter
console GET _search { “query”: { “constant_score”: { “filter”: { “term”: { “status”: “active” } } } } }
filter:query和filter的主要區(qū)別在: filter是結果導向的而query是過程導向。query傾向于“當前文檔和查詢的語句的相關度”而filter傾向于“當前文檔和查詢的條件是不是相符”。即在查詢過程中,query是要對查詢的每個結果計算相關性得分的,而filter不會。另外filter有相應的緩存機制,可以提高查詢效率。
8 組合查詢-Bool query
bool:可以組合多個查詢條件,bool查詢也是采用more_matchesisbetter的機制,因此滿足must和should子句的文檔將會合并起來計算分值文章來源:http://www.zghlxwxcb.cn/news/detail-444012.html
must:必須滿足子句(查詢)必須出現(xiàn)在匹配的文檔中,并將有助于得分。
filter:過濾器 不計算相關度分數(shù),cache☆子句(查詢)必須出現(xiàn)在匹配的文檔中。但是不像 must查詢的分數(shù)將被忽略。Filter子句在filter上下文中執(zhí)行,這意味著計分被忽略,并且子句被考慮用于緩存。
should:可能滿足 or子句(查詢)應出現(xiàn)在匹配的文檔中。
must_not:必須不滿足 不計算相關度分數(shù) not子句(查詢)不得出現(xiàn)在匹配的文檔中。子句在過濾器上下文中執(zhí)行,這意味著計分被忽略,并且子句被視為用于緩存。由于忽略計分,0因此將返回所有文檔的分數(shù)。
minimumshouldmatch:參數(shù)指定should返回的文檔必須匹配的子句的數(shù)量或百分比。如果bool查詢包含至少一個should子句,而沒有must或 filter子句,則默認值為1。否則,默認值為0文章來源地址http://www.zghlxwxcb.cn/news/detail-444012.html
到了這里,關于ES-搜索和查詢的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!