查询弹性搜索,其中键的值至少是某个数字



我正在处理文件以识别它们是否包含标签以及识别标签的置信度。

我创建了一个名为 tagsnested映射,其中包含label(文本(和confidence(在 0 到 100 之间浮点(。

这是我认为查询如何工作的示例(我知道它是无效的(。它应该是类似于"查找标签为 A 和 B 的文档。A 的置信度必须至少为 37,B 的置信度必须至少为 80"。

{
  "query": {
    "nested": {
      "path": "tags",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "tags.label": "A"
              },
              "range": {
                "tags.confidence": {
                  "gte": 37
                }
              }
            },
            {
              "match": {
                "tags.label": "B"
              },
              "range": {
                "tags.confidence": {
                  "gte": 80
                }
              }
            }
          ]
        }
      }
    }
  }
}

有什么想法吗?我很确定我需要以不同的方式处理它(不同的映射(。我不确定如何在ElasticSearch中完成此操作。这可能吗?

假设您的父文档将包含两个嵌套文档,如下所示:

{  
   "tags":[  
      {  
         "label":"A",
         "confidence":40
      },
      {  
         "label":"B",
         "confidence":85
      }
   ]
}

如果是这种情况,下面是您的查询方式:

嵌套查询:

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "tags",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "tags.label": "A"
                    }
                  },
                  {
                    "range": {
                      "tags.confidence": {
                        "gte": 37
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "tags",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "tags.label": "B"
                    }
                  },
                  {
                    "range": {
                      "tags.confidence": {
                        "gte": 80
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

请注意,每个嵌套文档都作为单独的文档编制索引。这就是您必须提及两个单独查询的原因。否则,使用您所拥有的功能,它将搜索其父文档的一个/单个嵌套文档中的所有四个值。

希望这有帮助!

最新更新