我正在使用Java API使用ElasticSearch。使用Java API在ElasticSearch中使用JaroWinkler對查詢進行評分
目前,我正在做一些匹配查詢。現在,我想計算我的查詢的_score
值,使用字符串的Jaro Winkler距離。
ElasticSearch是否允許使用用戶定義的其他評分函數?
我正在使用Java API使用ElasticSearch。使用Java API在ElasticSearch中使用JaroWinkler對查詢進行評分
目前,我正在做一些匹配查詢。現在,我想計算我的查詢的_score
值,使用字符串的Jaro Winkler距離。
ElasticSearch是否允許使用用戶定義的其他評分函數?
Elasticsearch使用lucene底下的所有評分。 Lucene使用TF/IDF在6.0以前的版本中進行評分,而6.0以後的版本使用Bm25算法。
Elasticsearch允許您編寫腳本來修改已從lucene獲得的匹配結果的分數,但沒有其他方法可以編寫用於初始搜索的評分函數。同樣嘗試修改分數,由於結果分頁,因此分數有限制,因爲與第一頁上的所有結果相比,第二頁上的結果可能比使用算法更好。
所以你唯一能做的就是寫一個插件來爲elasticsearch/lucene做這件事。你還應該記住,elasticsearch/lucene使用倒排索引,所以你的結果可能不是你想要的。
此外,由於無法訪問服務器,所以您的問題的簡短答案是否定的,無法完成。 您可以做的最好的方法是請求大量的結果,然後使用腳本提升它們。
編輯:做一些更多的研究,我發現,你也許能夠非常相似,要使用function score查詢elasticsearch做,用的fuzziness幫助什麼東西之後。雖然它仍然不會改變文件的發現方式(必須處理倒排索引和分析器等),但是你肯定會對結果的評分產生混亂。也看看this
Elasticsearch使用該算法terms suggesters。如果你想要這樣的自定義評分,也許你需要爲它建立一個插件,如果你沒有訪問服務器的地方你可以安裝插件可能很困難。或者,如果你有一個Groovy腳本實現,也許你可以在搜索時使用腳本來完成它。
您是否找到了答案?我有完全相同的問題 – alkis
Elasticsearch對[術語建議]使用該算法(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-term.html)。如果你想要這樣的自定義評分,也許你需要爲它建立一個插件,如果你沒有訪問服務器的地方你可以安裝插件可能很困難。或者,如果你有一個Groovy腳本實現,也許你可以在搜索時使用腳本來完成它。 –
快速掃描網址:https://github.com/ucidentity/id-match-engine/blob/master/grails-app/services/dolphin/JaroWinklerDistanceService.groovy –