当前位置: 首页 > 知识库问答 >
问题:

必须(和)应该(或)不产生期望结果的Elasticsearch查询

杨骁
2023-03-14

我正在尝试执行X和(y或z)的查询,我需要得到代理是列表代理还是销售代理的所有已售出的属性。

只有bool才能得到9324个结果。当我添加bool should时,我得到了相同的结果集9324。ID为140699的代理应该只有大约100个结果。我也尝试过一个布尔过滤器,但没有成功。当用过滤器替换should时,结果就像另一个bool must一样,我只得到代理是列表代理和销售代理的结果

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
}

共有1个答案

常炯
2023-03-14

使用您的表示法,您将执行如下所示的查询:

(statuscatid:sold AND closingDate:now-3M OR listAgent1:140699 OR sellingAgent1:140699)

我建议您阅读这篇官方博客文章,以便更好地理解Elastic中的bool查询。如果您想要这样的查询:

(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
}
 类似资料:
  • 我正在使用OpenNLP处理诸如“在洛杉矶工作的医生”和“住在好莱坞并在圣莫尼卡工作的女性”之类的查询。对于理解人类的英语来说,这些句子很明显,主题是“医生”和“女性”。然而,当我使用opennlp时,它将句子标记为 [女性生活][好莱坞] 这是另一个句子“住在圣莫尼卡、在马里布工作和踢足球的人”被处理为 为什么OpenNLP的POS标记器错误地标记了它们?这些句子有最简单的语法结构。如果最先进的

  • 为了开始使用elasticsearch和kibana,我尝试了教程。但现在我得到了一个我自己无法解决的错误。 它对这个非常有趣:elasticsearch bool查询组合必须与或 亲切地问候格雷格

  • 问题内容: 和ES中的bool查询有什么区别? 如果我 只 想要包含我的条款的结果,那我应该使用? 我有一个查询,应该只包含某些值,也没有日期/时间戳比今天的时间/日期低的结果-现在 也 我可以在下面的代码中使用多个过滤器吗: 问题答案: 必须 表示:子句(查询)必须出现在匹配的文档中。这些子句必须匹配,例如逻辑 AND 。 应该 表示:这些子句中的至少一个必须匹配,例如逻辑 OR 。 基本上,它

  • 我目前正在尝试将一个基于Solr的应用程序迁移到ElasticSearch。 我有这个lucene查询 根据我的理解,这是一个必须子句与布尔OR结合的组合: “获取名称中包含(foo和bar)或信息中包含(foo和bar)的所有文档。之后,根据条件筛选结果state=1,并增强具有图像的文档。” 我一直试图在MUST中使用bool查询,但未能将boolean或转换为MUST子句。以下是我的资料:

  • 你好,我希望你们能帮我解决一个困扰我几天的问题。当我将脚本的结果导出到csv文件时,我无法得到正确的输出。

  • 问题内容: 我目前正在尝试将基于Solr的应用程序迁移到Elasticsearch。 我有这个lucene查询 据我了解,这是MUST子句与布尔OR的组合: “获取所有包含(名称中包含foo AND条)或(信息中包含foo AND条)的所有文档。在此之后,按条件state = 1过滤结果,并增强具有图像的文档。” 我一直在尝试将布尔查询与MUST一起使用,但是我无法将布尔OR放入must子句中。这