关于ES查询文档标记来源问题
生活随笔
收集整理的這篇文章主要介紹了
关于ES查询文档标记来源问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于ES查詢文檔標記來源問題
1.目前知了使用的方案
知了目前使用的是ES為Java提供一個查詢接口,叫做QueryBuilder
當用戶傳入查詢后,現在我們做了一個這個事情——多字段匹配查詢
reBuilder = reBuilder.must(multiMatchQuery(query, "title", "text"));其中這個query就是用戶的輸入
官方文檔給出的解釋是:Finds documents which match any field, but uses the _score from the best field.
實際上這個多字段匹配查詢可以這么理解:
比如說用戶搜索一個「北京郵電大學」
我在標題和正文里分別對北京郵電大學進行全文檢索,然后分別在兩個字段里按照命中率(或者說_score)進行排序
然后將這兩個排序結果取并集,在兩個字段命中率都高的排名考前
最后得到一個沒有重復的文檔集合,返回給用戶
這就造成一個問題,通過這種方法獲得的結果是這樣的
["0": {"id": 17516,"crop_id": null,"user_id": 23,"create_time": 1631950049000,"edit_time": 1631950049000,"title": "計算機學院2021級培養方案","text": "<p>計算機學院2021級培養方案,包括:</p><p>北京郵電大學專業學位碩士研究生培養方案(2021級)-9.14.pdf<br />北京郵電大學博士研究 生培養方案(2021級)-9.3.pdf<br />北京郵電大學學術學位碩士研究生培養方案(2021級)-9.9.pdf<br />北京郵電大學直博研究生培養方案(2021級)-9.3.pdf</p>","attachment": null,"superior": 0,"recognition": null,"opposition": null,"pageview": null,"collection": null,"group_id": "","label_id": "111,203,129","user_name": null,"group_name": null,"label_name": null,"permissionid": "0" }]是一個一個數組的形式,沒有命中率,也不知道是在標題還是正文還是附件搜出來的
2.或許可以采用的解決方法
自行封裝一個查詢函數,來實現一個類似于多字段查詢的功能
主要原理還是調用ES的最原生的Restful API分別查詢各個字段,再按照我們的規則進行合并,例如
POST http://192.168.36.136:9200/_search
{"query": {"query_string": {"query": "北京郵電大學"}} }可以得到這樣的返回
{"took": 246,"timed_out": false,"_shards": {"total": 3,"successful": 3,"skipped": 0,"failed": 0},"hits": {"total": 105,"max_score": 15.921347,"hits": [{"_index": "knowledge_ms","_type": "resource","_id": "17516","_score": 15.921347, # 這里能得到一個命中率"_source": {"id": 17516,"crop_id": null,"user_id": 23,"create_time": 1631950049000,"edit_time": 1631950049000,"title": "計算機學院2021級培養方案","text": "<p>計算機學院2021級培養方案,包括:</p><p>北京郵電大學專業學位碩士研究生培養方案(2021級)-9.14.pdf<br />北 京郵電大學博士研究生培養方案(2021級)-9.3.pdf<br />北京郵電大學學術學位碩士研究生培養方案(2021級)-9.9.pdf<br />北京郵電大學直博研究生培養方案(2021級)-9.3.pdf</p>","attachment": null,按照這樣的規則我們能分別得到標題命中率的排名、正文命中率的排名和附件命中率的排名
然后我們可以對這三個排名拉一個(可能有重復文檔的)大排名給用戶展示出來,并且告訴用戶是哪里搜出來的
最后得到的感覺大概是這個樣子
總結
以上是生活随笔為你收集整理的关于ES查询文档标记来源问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS turtlesim小乌龟的使用与
- 下一篇: Java-面向对象进阶2