菏澤做網(wǎng)站設(shè)計西安seo和網(wǎng)絡(luò)推廣
在我自己做項目使用ES的時候,發(fā)現(xiàn)了黑馬沒教的方法,以及一些它項目的小問題
搜索時的匹配方法
這個boolQuery().should
我的項目是通過文章的標(biāo)題title和內(nèi)容content來進(jìn)行搜索
但是黑馬它的項目只用了must
如果我們的title和content都用must,那么我們的搜索內(nèi)容就是 必須同時匹配到content和title? 這樣子是錯誤的
所以我們用should(),這個是我們可能匹配到
可以這樣子理解
must()表示必須,should表示或者
自動補全的字段必須是Completion類型
我們的自動補全的Suggestion字段其實是一個List<>一樣的類型
所以我們的java代碼中的對象是List類型
我的項目中我是把city,和title這兩個放到我們的List中,然后這個來實現(xiàn)我們的自動補全
黑馬項目的自動補全的不足
首先黑馬的教程提出了一個例子
獅子,和虱子,我們搜索的時候不應(yīng)該都轉(zhuǎn)成拼音shizi
這樣子就會導(dǎo)致兩個都搜索出來從而導(dǎo)致我們的搜索結(jié)果的錯誤
所以我們創(chuàng)建時的分詞器用拼音,搜索時的分詞器就不用拼音了
我們指定兩種分詞器,這樣就決定了我們的索引庫的結(jié)構(gòu)
analyzer是我們的創(chuàng)建時的分詞器
search_analyzer是我們的搜索時的分詞器
這樣我們就實現(xiàn)了中文搜索的時候用中文搜索,然后拼音搜索的時候用拼音搜索
我們搜索 動? 成功用中文搜索了
我們搜索dong 也成功用拼音搜索,搜到了 東
也就是說我們的ES的搜索是沒有問題,因為我們的索引的結(jié)構(gòu)已經(jīng)指定了
中文搜索的時候使用中文 英文搜索的時候使用英文
但是我們的自動補全,其實有問題
我們的suggestion自動補全字段,其實也是要中文搜索的時候補全中文,拼音搜索的時候補全拼音
但是黑馬的教程里面,它的自動補全沒有中文搜索的時候補全中文
如果我們不指定中文搜索的時候補全中文
那么我們搜索 “導(dǎo)”這個字的時候? 它的底層會轉(zhuǎn)成 d? 從而搜索出一堆無關(guān)的東西
例如搜索出了這些
所以我們重新弄索引,重新指定我們的搜索的分詞器
這樣我們就能實現(xiàn)
Suggestion字段的時候
拼音的時候拼音補全
中文的時候中文補全
例如我們搜索dao
搜索 導(dǎo)
搜索 動
ok,全部成功了
黑馬的課程里面沒有給Suggetion字段的補全弄成拼音的時候用拼音搜索補全,中文搜索時用中文搜索補全,從而造成了自動補全的問題,這樣子就沒有問題了