![](/img/trans.png)
[英]Elasticsearch - How to return distinct documents for certain fields
[英]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.