簡體   English   中英

如何使用過濾查詢獲取某些字段中包含某些單詞的文檔?

[英]How to get documents that contain certain word in some fields with filtered query?

我想找到所有具有“農業”類別的書籍。 這些書的標題或摘要字段中應包含“paddy”一詞。 這是我的查詢:

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

這些查詢返回所有具有“農業”類別的書籍,即使它包含“稻谷”一詞。 我做錯了什么?

讓我首先向您解釋如何,您的查詢正在獲取所有記錄,即使它包含單詞“paddy”。 這是 b/c 您正在使用should子句,這僅意味着該子句(查詢)應出現在匹配文檔中。 但這意味着它不會強制它必須出現,因此它會獲取索引中的所有文檔,然后僅根據category對其進行過濾。

你需要的是一個上層的must子句,這意味着它必須出現,但后來我使用了嵌套的應該,因為它可以在標題抽象字段中,但這些字段中至少有一個必須包含該值,以便上層must子句返回真。

正確的查詢如下,根據您的用例,我在本地嘗試過並且工作正常:

{
    "query": {
        "bool": {
            "must": {
                "bool": {
                    "should": [
                        {
                            "match": {
                                "abstract": "paddy"
                            }
                        },
                        {
                            "match": {
                                "title": "paddy"
                            }
                        }
                    ]
                }
            },
            "filter": {
                "term": {
                    "category": "agriculture"
                }
            }
        }
    }
}

讓我知道您是否清楚並解決了您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM