查询 elasticsearch 其中键的值至少是某个数字

Query elasticsearch where a key's value is at least some number

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

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

这是我认为查询将如何工作的示例(我知道它无效)。应该是 "Find documents that have the tags labelled A and B. A must have a confidence of at least 37 and B must have a confidence of at least 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
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

请注意,每个嵌套文档都作为单独的文档编制索引。这就是您必须提及两个单独查询的原因。否则,根据你所拥有的,它会搜索其父文档的 one/single 嵌套文档中的所有四个值。

希望对您有所帮助!