Elasticsearch 不同的搜索类型之间的区别
1、match? ?輕量級搜索
?
1 GET /wymlib/_search 2 3 { 4 "query": { 5 "match": { 6 ?"title": "王陽明" 7 } 8 } 9 }上面的查詢匹配就會進行分詞,比如"王陽明"會被ik分詞器分為"王陽明" ,"陽明", "王","陽","明" 那么所有包含這些詞中的一個或多個的文檔就會被搜索出來。并且根據lucene的評分機制(TF/IDF)來進行評分。
?
2、match_phrase? ?短語搜索
?
1 GET /wymlib/_search 2 3 { 4 "query": { 5 "match_phrase": { 6 "title": "王陽明" 7 } 8 } 9 }match_phrase要求只匹配上"王陽明"這個短語,完全匹配可能比較嚴,我們會希望有個可調節因子,少匹配一個也滿足,那就需要使用到slop
1 { 2 "query": { 3 "match_phrase": { 4 "title" : { 5 "query" : "王陽明", 6 "slop" : 1 7 } 8 } 9 } 10 }?
3、multi_match? ?多字段匹配
?
如果我們希望兩個或兩個以上的字段進行匹配,其中一個字段能匹配上就滿足的話,使用multi_match
1 { 2 "query": { 3 "multi_match": { 4 "query": "王陽明第三卷", 5 "fields": [ 6 "title", 7 "keywords", 8 "author" 9 ] 10 } 11 } 12 }multi_match中有三種類型即: best_fields 、 most_fields 和 cross_fields (最佳字段、多數字段、跨字段)
1) 我們希望完全匹配的文檔占的評分比較高,則需要使用best_fields,multi_match默認是best_fields
1 { 2 "query": { 3 "multi_match": { 4 "query": "王陽明", 5 "fields": [ 6 "title", 7 "yearAlias" 8 ], 9 "minimum_should_match": "70%" 10 } 11 } 12 }2)?我們希望越多字段匹配的文檔評分越高,就要使用most_fields
{"query": {"multi_match": {"query": "王陽明","type": "most_fields","fields": ["title","keywords"]}} }3)?我們會希望這個詞條的分詞詞匯是分配到不同字段中的,那么就使用cross_fields
1 { 2 "query": { 3 "multi_match": { 4 "query": "王陽明", 5 "fields": [ 6 "title", 7 "keywords" 8 ], 9 "type": "cross_fields" 10 } 11 }, 12 "highlight": { 13 "fields": { 14 "title": { 15 "pre_tags": ["<a>" ], 16 "post_tags": [ "</a>"] 17 }, 18 "keywords": { 19 "pre_tags": ["<b>" ], 20 "post_tags": ["</b>" ] 21 } 22 } 23 } 24 }上面查詢語句中,包含了高亮顯示結果屬性:highligt
?
4、term?精確值查找
1 { 2 "query": { 3 "term": { 4 "title": "王陽明" 5 } 6 } 7 }與match查詢類似,但term是精確查找,代表完全匹配,即不進行分詞器分析,文檔中必須包含整個搜索的詞匯,但是 term 和 terms 是 必須包含(must contain) 操作,而不是必須精確相等(must equal exactly),當查詢 jack 時,[jack] 和[jack,jone]兩條數據都會被找到
轉載于:https://www.cnblogs.com/hoojjack/p/8600230.html
總結
以上是生活随笔為你收集整理的Elasticsearch 不同的搜索类型之间的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android深入四大组件(八)广播的注
- 下一篇: 分布式理论:CAP是三选二吗?