ElasticSearch(十)Elasticsearch檢索出的資料列表按欄位匹配的優先順序及搜尋單詞拼音一部分搜不到資料

OldBoy~發表於2019-01-11

檢索出的資料列表按欄位匹配的優先順序

一、舉例

比如,釋出一篇文章,文章包括基本的欄位包括標題、釋出時間、點選率、關鍵字、內容。當在頁面中輸入“教育”搜尋關鍵詞,會檢索出指定欄位包括“教育”的所有資料,舉例:

id         title             keyword                   content
 1          納稅       繼續教育,贍養父母,房屋貸款            教育,子女
 2          上學         義務教育                      好好學習天天向上
 3          畢業         好好工作好好學習                  結束教育教育

有以上三條資料,如果按照預設的ES檢索機制,會按照最多匹配的優先順序,比如,id為1的keyword和content欄位都包括教育關鍵字,id為1的會排在最前面,同時id為2和3的,id3更有匹配度,包括兩個教育關鍵字,可能ES給檢出的資料排序為1、3、2(這裡只是猜測,懶得動手了)

二、需求

在公司需求中有這麼一個要求,首先,檢索資料會先檢索出關鍵字(keyword)的資料,點選載入更多按鈕,再檢索關鍵字(keyword)和內容(content)同時包括的資料,並且匹配關鍵字的優先展示在前面。 

如果不瞭解ES強大的童鞋可能會在檢索出所有資料的時候然後再把資料處理一遍。BUT,ES的排序機制是很強大的,我在根據公司產品需求搜了各種相關的帖子,一邊瞭解一邊實踐,最終走通了產品需求想要的效果。

三、程式碼

//總之TMD稀裡糊塗實現了需求,不知道具體為什麼,有空深入一下ES吧~    

$MultiMatch_obj = new \Elastica\Query\MultiMatch(); $MultiMatch_obj->setQuery($keyword); if ($search_type == 'default') { //這裡是首先預設載入匹配關鍵字的列表 $MultiMatch_obj->setFields(array('keywords')); } else { //點選載入更多匹配出包括關鍵字和內容的列表 $MultiMatch_obj->setTieBreaker(0.3); //設定Breaker $MultiMatch_obj->setType('best_fields'); //開啟best_fields $MultiMatch_obj->setFields(array('keywords^901209','content')); //要優先的keywords 加一個^,後面還跟一個數字(數字隨便寫的,我覺得比content大就可以了,content應該也是可以跟^數字的 $MultiMatch_obj->setOperator('or'); $MultiMatch_obj->setMinimumShouldMatch('30%'); //這裡還需要設定 } $query->setQuery($MultiMatch_obj); //命中全部紀錄

四、參考

https://www.cnblogs.com/bonelee/p/6827068.html
https://www.cnblogs.com/clonen/p/6674922.html

https://www.cnblogs.com/yjf512/p/4897294.html

五、手冊

Elasticsearch權威指南(中文版)

 

解決ES搜尋拼音字母的一部分搜不到資料

問題通:https://elasticsearch.cn/question/5418

         $Wildcard_query1 = new \Elastica\Query\Wildcard('keywords',"*". $keyword."*");
            $Wildcard_query2 = new \Elastica\Query\Wildcard('title',"*". $keyword."*");
            $Wildcard_query3 = new \Elastica\Query\Wildcard('content',"*". $keyword."*");
            $query->addShould($Wildcard_query1)->addShould($Wildcard_query2)->addShould($Wildcard_query3);

 

 

 

 

相關文章