match VS match_phrase

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

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

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

返回結果:it

很明顯,「美國哈佛大學」六個字,它作了分詞:["美國","哈佛","大學"](固然可能更詳細),而後獲得的結果是2964條,也就是說,包含這幾個關鍵字的有這麼多,那麼我在換上 match_phrase搜索,語句以下:ast

複製代碼

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 }

複製代碼

結果:基礎

看就兩條數據。因此,想用什麼搜索方式仍是看需求吧。擴展

相關文章
相關標籤/搜索