我想找到所有“农业”类的书。书中应在标题或摘要栏中包含“稻谷”一词。以下是我的疑问:
GET /books/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"abstract": "paddy"
}
},
{
"match": {
"title": "paddy"
}
}
],
"filter": {
"term": {
"category": "Agriculture"
}
}
}
}
}这些查询返回所有带有“农业”类别的书籍,即使它包含单词“稻谷”或不包含。我做错什么了?
发布于 2019-06-22 14:42:25
让我先向您解释一下,您的查询是如何获取所有记录的,,甚至它包含单词“稻谷”与否。--这是b/c --您使用的是应该子句,它简单地意味着子句(查询)应该出现在匹配的文档中。,但它并不意味着它必须显示,因此它正在获取索引中的所有文档,然后根据category对其进行过滤。
您需要的是一个较高级别的必须子句,这意味着它必须出现,但是我使用了嵌套的 so ,因为它可以在标题或抽象字段中使用,但是这些字段中至少有一个必须包含该值,因此上层必须e 217子句返回true。
下面是正确的查询,根据您的用例,我在本地尝试了这个查询,并且运行得很好:
{
"query": {
"bool": {
"must": {
"bool": {
"should": [
{
"match": {
"abstract": "paddy"
}
},
{
"match": {
"title": "paddy"
}
}
]
}
},
"filter": {
"term": {
"category": "agriculture"
}
}
}
}
}如果你清楚并解决了你的问题,请告诉我。
https://stackoverflow.com/questions/56715973
复制相似问题