【Elasticsearch】搜索小記之 match VS match_phrase


  最近稍微研究了一下ElasticSearch(下文簡稱ES),所謂可擴展的開源彈性搜索解決方案,跟同事笑稱,如果它作為SQL SERVER的話,我的了解還在基本的select語句上,當然學習它也是一個積累知識的過程,閑言少敘,書歸正傳,今天簡單將里面中的基礎的兩個查詢總結一下,有不對的地方歡迎各位指出。

  剛剛接觸ES的時候,發現他的搜索確實很快,不像SQL Server 的like查詢,他還能通過解析用戶搜索的詞匯,通過相關系數(score)都給你查出來,當然SQLServer 也有全文搜索,這個暫且不提。先舉個例子:我想搜索 包含“美國哈佛大學”的title。match語句如下:

 1 {
 2   "fields": [
 3     "title"
 4   ],
 5   "query": {
 6     "match": {
 7       "title": "美國哈佛大學"
 8     }
 9   },
10   "size": 100
11 }

返回結果:

很明顯,“美國哈佛大學”六個字,它做了分詞:["美國","哈佛","大學"](當然可能更詳細),然后得到的結果是2964條,也就是說,包含這幾個關鍵字的有這么多,那么我在換上 match_phrase搜索,語句如下:

 1 {
 2   "fields": [
 3     "title"
 4   ],
 5   "query": {
 6     "match_phrase": {
 7       "title": {
 8         "query": "美國哈佛大學",
 9         "slop": 0
10       }
11     }
12   },
13   "size": 100
14 }

結果:

看就兩條數據。所以,想用什么搜索方式還是看需求吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM