簡體   English   中英

按 elasticsearch 中 script_score 的閾值過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM