0

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

我创建了一个nested名为的映射tags,其中包含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 中完成此操作。这可能吗?

4

1 回答 1

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

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

希望这可以帮助!

于 2019-04-28T20:40:31.797 回答