[英]Filter by a threshold value of script_score in elasticsearch
我在 elasticsearch 中使用cosineSimilarity
來搜索文檔,查詢如下所示:
{
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.queryVector, 'title_vector') + 1.0",
"params": {
"queryVector": list(feat)
}
}
}
}}
這里的問題是,盡管相似度得分,我仍將獲得所有結果。 我想根據閾值過濾器值過濾我的結果。
我嘗試將bool
與以下腳本一起使用:
query = {
"query": {
"bool" : {
"must": {
"match_all": {}
},
"filter" : {
"script" : {
"source": "cosineSimilarity(params.queryVector, 'title_vector') + 1.0 > 1.4",
"params": {
"queryVector": list(feat)
}
}
}
}
}
}
但這會引發錯誤:
RequestError(400, 'x_content_parse_exception', '[source] query malformed, no start_object after query name')
重要限制
script_score 查詢旨在包裝限制性查詢,並修改它返回的文檔的分數。 但是,我們提供了 match_all 查詢,這意味着腳本將在索引中的所有文檔上運行。 這是 Elasticsearch 中向量相似性的當前限制——向量可用於對文檔進行評分,但不能用於初始檢索步驟。 支持基於向量相似性的檢索是正在進行的工作的一個重要領域。
編輯
在請求中添加min_score
將在執行 match_all 后根據計算的分數進行過濾。
{
"min_score": 1.4,
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.queryVector, 'title_vector') + 1.0",
"params": {
"queryVector": list(feat)
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.