当前位置: 首页 > 面试题库 >

如何将2个匹配查询加入对Elasticsearch的查询中?

刘弘济
2023-03-14
问题内容

我想查询的数据user_id'1'name'John'。编写常用的SQL很容易:

select * from t where user_id = '1' and name = 'John';

但是,对Elasticsearch进行查询对我来说并不容易。

首先,我查询了user_id

{
  "query" : {
    "match" : {
      "user_id" : "1"
    }
  }
}

结果是我所期望的。

然后,我查询了name

{
  "query" : {
    "match" : {
      "name" : "John"
    }
  }
}

它也运作良好。

但是我无法使用和操作将2个条件连接在一起的查询。如何将这两个匹配查询合并为一个使用和操作?


问题答案:

您需要的是布尔查询,您可以在其中输入所有单个查询:

(我无法测试查询,这可能是错误的,但是bool-query是您问题的答案)

{
    "bool" : {
        "must" : [{
            "match" : {
                "user_id" : "1"
            },
            "match" : {
                "name" : "John"
            }
        }]
    }
}


 类似资料:
  • 我是Elasticsearch新手,对匹配查询的工作方式感到困惑。我有以下映射: 我批量导入了以下文档 我验证了所有文档都已成功加载。然后我执行匹配查询: 它只返回#1文档。我在这里感到困惑。为什么它不返回所有三个文档?我应该使用什么查询来返回这三个文档,因为它们在字段中都有“quiet”根单词? 谢谢和问候。

  • 问题内容: 我正在用查询查询我的elasticsearch索引。查询本身的结构与此类似 我希望能够确定所有这些查询中哪一个是与结果匹配的查询。是否有内置的elasticsearch方法允许这样做,还是我必须手动进行? 问题答案: 您可以使用命名查询,然后在结果中获得匹配的查询的名称。 然后,在结果中,您将获得一个数组,其中包含与文档匹配的查询的名称。

  • 问题内容: 假设我们有两种索引类型:成员和餐厅。两者都包含城市属性。 我想过滤成员(例如按名称),并希望在结果中包括成员所在城市/城市的餐馆名称列表。 是否可以仅使用一个ES查询来执行此操作?我猜它应该类似于数据库联接。 谢谢。 问题答案: ES没有联接的概念。这是因为它是索引而不是关系数据库。最好打两个电话。一个获取会员的文件,然后另一个获取餐厅。 除非您有特殊情况,否则这仍然应该非常有效。

  • 问题内容: 我有以下 匹配 查询字符串: 我想它的意思是,但实际上它能执行。 然后我尝试了 术语 查询字符串: 它执行,显示 术语 查询通过数组支持多个OR条件。 我很好奇为什么 匹配 查询不支持通过数组的 OR 条件?并且它不显示任何语法错误。 问题答案: 该查询仅支持要指定的单个字符串值。官方文档中没有明确指定它,但是如果您愿意阅读的源代码,则可以看到,在解析字段时,解析器将跳过标记来分隔数组

  • 问题内容: 有什么办法(查询)在ElasticSearch中加入以下2个JSON 以上2种JSON在Logstash中以2种不同类型处理(输入),因此它们的索引在Elasticsearch中归档的不同“类型”中可用。 我想要的是在product_id字段上加入2个JSON。 问题答案: 当您说加入时,这取决于您的打算。Elasticsearch与支持表之间的JOIN的常规数据库不同。它是一个文本搜

  • 问题内容: 我必须找到具有字符串的匹配文档,例如:在某些“键”范围内的字符串:“ sky”。当我编写单独的匹配和范围查询时,我从ES中获得了输出,但是合并在一起时会抛出异常。 范围查询: 匹配查询: 组合查询: 组合查询在执行时会引发错误: 引发HTTP_EXCEPTIONS.get(状态码,TransportError)(状态码,error_message,Additional_info)ela