Elasticsearch KNN关键词搜索

dldeef67  于 2023-11-17  发布在  ElasticSearch
关注(0)|答案(2)|浏览(173)

我目前正在尝试构建一个搜索,其中knn搜索将在一个terms查询的结果集内使用。下面是我的测试查询,但我遇到了一个错误“格式错误的查询,预期[END_OBLOG],但发现[FEILD_NAME]”

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

字符串
有办法做到这一点吗?

r8uurelv

r8uurelv1#

从elasticsearch 8.2开始,您可以直接使用过滤器与_knn_search:

GET my-index/_knn_search
{
  "knn": {
    "field": "image_vector",
    "query_vector": [0.3, 0.1, 1.2],
    "k": 5,
    "num_candidates": 50
  },
  "filter": {
    "term": {
      "file_type": "svg"
    }
  },
  "_source": ["name"]
}

字符串
示例来自https://www.elastic.co/guide/en/elasticsearch/reference/8.2/knn-search-api.html

xvw2m8pv

xvw2m8pv2#

我认为你的查询格式不正确,应该像下面这样,即knn查询应该在bool/filter数组中,这样它就可以在terms查询所选择的同一组数据上工作。

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

字符串
PS:从8.4开始,这只对_search端点有效

相关问题