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

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

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

我创建了一个称为nestedtags映射,其中包含label(文本)和confidence(0到100之间的 float )。

这是我认为查询将如何工作的示例(我知道它无效)。它应该类似于“查找带有标签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
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

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

希望这可以帮助!

关于elasticsearch - 查询键的值至少为某个数字的elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894198/

相关文章:

linux - 如何使用 ssh 在 Linux 主机服务器上安装 Elastic Search

elasticsearch - Elasticsearch:数组的每个元素的总和

elasticsearch - ElasticSearch-如何按类型搜索?

elasticsearch - Elasticsearch相似文本查询

elasticsearch - 模糊查询未给出任何结果

elasticsearch - 如何在Elasticsearch中查询单词的替代拼写和表示形式?

elasticsearch - Elasticsearch中用于索引和搜索的不同定制分析器为用户查询提供NULL结果

elasticsearch - 在.Net 中模拟 Elasticsearch 响应

elasticsearch - 编写NEST查询以按分数对聚合存储桶进行排序

elasticsearch - 连字符上的打破字段值