【问题标题】:Unable to use OR condition in elastic search query无法在弹性搜索查询中使用 OR 条件
【发布时间】:2021-10-31 18:12:24
【问题描述】:

尝试对给定字段使用 OR 条件。搜索多个搜索模式,但每次执行查询时,它只返回一个搜索字符串的数据,而如果单独搜索,则会获取所需的数据。

{
    "query": {
        "bool": {
            "should": [
                {
                    "term": {"makeIt": {"value": "foo"}}
                },
                {
                    "term": {"makeIt": {"value": "roo"}}
                }
            ]
        }
    }
}

应该返回一个 sql 的所有可用值

select * from tablename where makeIt in ("foo","roo")

【问题讨论】:

    标签: json elasticsearch


    【解决方案1】:

    您可以使用terms query 子句,而不是使用should 子句组合两个术语查询

    {
      "query": {
        "terms": {
          "makeIt": [
            "foo",
            "roo"
          ]
        }
      }
    }
    

    问题中给出的查询也是正确的。我针对示例索引数据对其进行了测试,并得到了以下结果(对于两个查询)

    "hits": [
          {
            "_index": "69027360",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.0,
            "_source": {
              "makeIt": "foo"
            }
          },
          {
            "_index": "69027360",
            "_type": "_doc",
            "_id": "2",
            "_score": 1.0,
            "_source": {
              "makeIt": "roo"
            }
          }
        ]
    

    更新 1:

    正如 @Val 在 cmets 中提到的,如果没有设置 size 参数,默认情况下 Elasticsearch 返回 10 个文档。这可能是因为您拥有的文档不止包含 fooroo。 您需要在查询中添加 size 参数以获取包含这两个术语的搜索结果。

    将您的搜索查询修改为

    {
      "size": 20,           // note this
      "query": {
        "terms": {
          "makeIt": [
            "foo",
            "roo"
          ]
        }
      }
    }
    

    【讨论】:

    • @SJJ 请仔细阅读答案,如果这能解决您的问题,请告诉我?如果您仍然没有得到任何结果,请分享您的索引映射
    • 不幸的是,问题仍然存在,它仅返回任一查询中的一个搜索模式的数据。
    • @SJJ 你能分享你的索引映射吗?
    • 查询匹配了这两个词,但问题是返回的前 10 个文档具有相同的词,因为无法指定您希望在响应中混合使用这两个词.如果您返回的尺寸足够大,您最终会在回复中看到这两个字词
    • "makeIt": { "type": "keyword", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } }, "ignore_above": 20000
    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2018-07-01
    • 2019-11-15
    相关资源
    最近更新 更多