elasticsearch - 带有必须(和)应该(或)不产生预期结果的 Elasticsearch 查询
问题描述
我正在尝试执行 X AND (y OR z) 的查询,我需要获取代理是上市代理或销售代理的所有已售物业。
只有 bool 我必须得到 9324 结果。当我添加 bool should 时,我得到相同的结果集 9324。ID 为 140699 的代理应该只有大约 100 个结果。我也尝试过没有成功的布尔过滤器。当用过滤器替换应该时,结果就像另一个布尔必须,我只得到代理是上市代理和销售代理的结果
GET /property/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"statusCatID": {
"value": "Sold"
}
}
},
{
"range": {
"closingDate": {
"gte": "now-3M"
}
}
}
],
"should": [
{
"term": {
"listAgent1": {
"value": 140699
}
}
},
{
"term": {
"sellingAgent1": {
"value": 140699
}
}
}
]
}
},
"size": 300
}
解决方案
使用您的符号,您正在执行如下查询:
(statuscatid:sold AND closingDate:now-3M OR listAgent1:140699 OR sellingAgent1:140699)
我建议您阅读这篇官方博客文章,以更好地理解弹性中的布尔查询。如果你想要这样的查询:
(statuscatid:sold AND closingDate:now-3M) AND (listAgent1:140699 OR sellingAgent1:140699)
你应该这样写:
{
"query": {
"bool": {
"must": [
{
"term": {
"statusCatId": "sold"
}
},
{
"range": {
"closingDate": "now-3M"
}
},
{
"bool": {
"should": [
{
"term": {
"listAgent1": 140699
}
},
{
"term": {
"sellingAgent1": 140699
}
}
]
}
}
]
}
},
"size": 300
}
推荐阅读
- python - zip() 未针对具有浮点值的列表运行
- python-3.x - 定义一个函数来计算特定数组大小的均值差
- javascript - 来自 Python 的 Axios 发布请求等效项
- firebase - 尝试仅向使用 Firestore 规则发布照片的用户显示应用程序中的照片
- r - Tidyverse中的向量动态选择
- java - 使用 -Xlint(ReCompilingSuggestion) 重新编译
- flutter - 为什么我收到 Flutter HTTP 包错误类型“字符串”不是“地图”类型的子类型
'? - python - 通过选择适当的行加入两个熊猫数据框
- git - gitignore 全局配置到底做了什么?
- python - 有没有办法从熊猫数据框中删除自动截断?