首页 > 解决方案 > 使用关键字词进行 Elasticsearch KNN 搜索

问题描述

我目前正在尝试构建一个搜索,其中 knn 搜索将在术语查询的结果集中使用。以下是我的测试查询,但我遇到了错误“查询格式错误,应为 [END_OBJECT] 但找到 [FEILD_NAME]”

GET my-index2/_search
{
  "query":{
    "bool":{
      "should":[
        {"terms":{"t":["hello"]}}
        ]
    },
    "knn": {
      "my_vector2": {
        "vector": [2, 3, 5, 6],
        "k": 2
      }
    }
  },
  "_source":["t"]
}

有没有办法做到这一点?

标签: elasticsearch

解决方案


我认为您的查询格式不正确,应该如下所示,即knn查询应该在bool/filter数组内,以便它在与terms查询选择的数据集相同的数据集上工作。:

{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "t": [
              "hello"
            ]
          }
        },
        {
          "knn": {
            "my_vector2": {
              "vector": [
                2,
                3,
                5,
                6
              ],
              "k": 2
            }
          }
        }
      ]
    }
  },
  "_source": [
    "t"
  ]
}

推荐阅读