查询键的值至少为某个数字的elasticsearch

时间:2019-04-28 20:12:00

标签: elasticsearch elasticsearch-6 elasticsearch-query elasticsearch-nested

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

我创建了一个名为nested的{​​{1}}映射,其中包含tags(文本)和label(在0到100之间浮动)。

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

confidence

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

1 个答案:

答案 0 :(得分:2)

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

{  
   "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
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

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

希望这会有所帮助!