如何使用过滤查询获取某些字段中包含特定单词的文档?

时间:2019-06-22 13:44:59

标签: elasticsearch

我想找到所有带有“农业”类别的书。书名或摘要字段中应包含单词“ paddy”。 这是我的查询:

GET /books/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "abstract": "paddy"
          }
        },
        {
          "match": {
            "title": "paddy"
          }
        }
      ],
      "filter": {
        "term": {
          "category": "Agriculture"
        }
      }
    }
  }
}

该查询返回所有“农业”类别的书籍,即使其中是否包含单词“ paddy”。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

让我先向您解释如何,您的查询正在获取所有记录,甚至是否包含单词“ paddy”。。这是您正在使用 {{ 3}} 子句,仅表示该子句(查询)应出现在匹配的文档中。,但这并不意味着它强制必须出现,因此,它将获取索引中的所有文档,然后仅基于=SUM(ReportItems!Textbox22) 对其进行过滤。

您需要的是上层的必须子句,这意味着它必须出现,但随后我使用了嵌套的,因为它可以是 title strong>或 abstract 字段,但这些字段中至少有一个必须包含该值,以便上层 must 子句返回true。

下面是正确的查询,根据您的使用情况,我在本地尝试并可以正常工作:

category

让我知道您是否可以解决您的问题。