如何将查询与 ElasticSearch 结合使用到 KNN?

问题描述 投票:0回答:1

我面临一个问题,我需要在嵌套的 ElasticSearch 上进行 KNN 计算。 我的主要问题是关于查询,我有一个完整的系统来生成一些与用户个人资料相关的查询,它已经实现,我需要从与给定查询匹配的文档中获取 KNN。

这是我的实际代码,有一个非常简单的查询,但考虑到在 99% 的情况下,结合 bool/must/must_not 确实会更复杂。

POST feedbacks/_search
{
  "fields": [
    "id",
    "created_at",
    "satisfaction_ratio"
  ],
  "_source": false,
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must_not": [
              {
                "term": {
                  "id": 1190473 // Example query that doesn't work for KNN calculation
                }
              }
            ]
          }
        }
      ]
    }
  },
  "knn": {
    "inner_hits": {
      "_source": false,
      "fields": [
        "question_answers.value"
      ],
      "size": 1
    },
    "field": "question_answers.embedding",
    "k": 2,
    "num_candidates": 2,
    "query_vector": [
      -0.031112670898438,
      0.04901123046875,
      0.05078125,
      // 1024 dimensional
    ]
  }
}
elasticsearch artificial-intelligence knn
1个回答
0
投票

这似乎是您正在寻找的倒数排名融合 (rrf),但它是 Elastic Search 的一项高级功能。

如果您在同一搜索中使用 query 和 knn,这将是一个析取(OR 子句),因此将出现满足两者之一的结果。似乎还有另一种方法叫做凸组合,我还在研究它。

© www.soinside.com 2019 - 2024. All rights reserved.