需求推動學習,如果哪裡有問題,或者有更好的方法歡迎大傢俬我!!
需求:輸入多個片語,只要文中出現的都搜尋出來
類似SQL的:WHERE text LIKE "%quick%" AND text LIKE "%brown%" AND text LIKE "%fox%"
同樣剛看到需求,前面剛改了實現,也以為實現不了。後面看了下,還是比較簡單的。這裡算是一個小的技巧吧。
Partial Matching, Proximity Matching
1 elasticsearch學習六、完全匹配搜尋、精確匹配
方法/步驟
官方文件找到Partial Matching
萬用字元格式
使用標準的shell萬用字元
It uses the standard shell wildcards: ?matches any character, and * matches zero or more characters.
正則表示式的格式
短語匹配(Phrase Matching)
看的腦袋痛,如何在之前完全匹配搜尋的基礎上來實現呢
the match_phrase query is the one you should reach for when you want to find words that are near each other
大概意思就是找到鄰近的詞
The match_phrase query can also be written as a match query with type phrase
也可以寫成match的查詢格式,型別為phrase
這個就是我們完全匹配搜尋文章中的type啦
什麼是phrase
前面的查詢的資料必須滿足下面3個條件
1、quick, brown, fox 三個詞必須同時出現
2、brown 的位置必須比quick大1
3、fox 的位置必須比quick大2
到這裡發現我們的模糊查詢,其實不叫模糊查詢,ES中叫鄰近匹配(Proximity Matching)
可以通過slop引數配置多個詞之間的距離來實現多詞匹配
The slop parameter tells the match_phrase query how far apart terms are allowed to be while still considering the document a match. By how far apart we mean how many times do you need to move a term in order to make the query and document match?
把slop的值設的足夠大,好了現在只要文中出現指定的詞,就都能搜尋出來啦
不過中文的這樣做好像有點小問題,只有指定的字在全文中都存在就會搜尋出來。。。。
如果有啥好的辦法歡迎大傢俬我