通过Id或字段值Opensearch KNN查询

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

有很多关于如何使用 Opensearch 使用矢量索引通过矢量场进行查询的示例。我正在寻找使用 KNN,但我需要查询:

  1. 匹配项目的唯一字段属性(ItemId、str)
  2. 对于该项目,运行 KNN 搜索嵌入字段
  3. 返回top_k个最相似的项目(不需要嵌入)

到目前为止,我一直在使用两个查询:

  1. 通过ItemId查询,返回该item的Embeddings
  2. KNN 搜索该项目的嵌入

是否可以将它们合并到一个查询中?

示例索引(使用Python):

"settings": {
    "index": {
        "knn": True,
    }
},
"mappings": {
    "properties": {
        "ItemId": {"type": "keyword"},
        "TextBody": {"type": "text"},
        "Embeddings": {
            "type": "knn_vector",
            "dimension": 1536,
        },
    }
}

根据ItemId查询

query = {
"query": {"match": {"ItemId": <item_id>}},
     "_source": True,
}

KNN 搜索

query = {
"size": 4,
"query": {
    "script_score": {
        "query": {"match_all": {}},
        "script": {
            "source": "knn_score",
            "lang": "knn",
            "params": {
                "field": "Embeddings",
                "query_value": <item_embeddings>,
                "space_type": "l2",
            },
        },
    }
},
    "_source": False,
    "fields": ["ItemId", "TextBody"]
}
python knn opensearch amazon-opensearch
1个回答
0
投票

您是否发现任何有关在操作系统中的查询中组合两种类型的问题,我认为这里仍然不可能。

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