最近稍微研究了一下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 }
結果:
看就兩條數據。所以,想用什么搜索方式還是看需求吧。