日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于ES查询文档标记来源问题

發布時間:2024/1/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于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查询文档标记来源问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。