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

条款查询机制可以通过ID以外的其他字段查询吗?

南门鸿雪
2023-03-14
问题内容

这是有关条款的Elasticsearch官方网站:https :
//www.elastic.co/guide/en/elasticsearch/reference/2.1/query-dsl-terms-
query.html

如我们所见,如果要进行术语查找机制查询,则应使用如下命令:

curl -XGET localhost:9200/tweets/_search -d '{
  "query" : {
    "terms" : {
      "user" : {
        "index" : "users",
        "type" : "user",
        "id" : "2",
        "path" : "followers"
      }
    }
  }
}'

但是,如果我想通过其他用户领域进行查询怎么办。假设用户还有其他一些字段,例如名称,我是否可以使用术语查找机制通过给用户提供名称(而不提供ID)来查找推文。我试图使用这样的命令:

curl -XGET localhost:9200/tweets/_search -d '{
  "query" : {
    "terms" : {
      "user" : {
        "index" : "users",
        "type" : "user",
        "name" : "Jane",
        "path" : "followers"
      }
    }
  }
}'

但发生错误。期待您的帮助。谢谢!


问题答案:

术语查找机制基本上是一种内置的优化,无需对两个索引JOIN进行两次查询,即在索引A中进行一次查询以获取要查找的ID,而在索引B中进行第二次获取具有这些ID的文档。

与SQL相反,这种JOIN只能在id字段上工作,因为这是通过GET调用从Elasticsearch唯一检索文档的唯一方法,这正是Elasticsearch在terms查询中所做的。

因此,要回答您的问题,术语检索机制将不适用于该字段以外的任何其他字段,id因为要检索的第一个文档必须是唯一的。在您的情况下,ES不会知道如何为用户获取文档,name
Jane因为name它只是用户文档中存在的字段,而绝不会为user唯一标识Jane



 类似资料:
  • 问题内容: 例如,我有两个实体:雇员和地址。在这些实体中,Employee有一个外键AddressID引用了Address上的ID列。在Java域对象中,Hibernate很好地将forgein键整数字段与Address对象字段包装在一起。但是现在,如何查询具有特定AddressID的Employee? 我试图创建一个表别名。这似乎可行,但相当尴尬。 我也曾尝试做这样的事情: 它有时会起作用,但并

  • 问题内容: 我有两个班,并有一个互相一一对应关系。这是它们的注释方式。 如您所见,是关系的所有者,并且是此双向关系的另一端。InvitedTech也与 Now 有关系,当我编写一个简单查询以获取所有排期时,它总共触发三个查询。第一个让我得到结果,但是触发了另外两个查询。 查询所有航班(这是我唯一需要的航班) 通过InvitedTech和Flight之间的联接进行查询 在被邀请的科技公司和酒店之间进

  • 问题内容: 在MySQL以外的任何事物中,它感觉都非常简单。 基本上,我需要根据一个特定术语返回多少结果来切换我正在使用的索引类型以及其他一些条件。 效果: MySQL语句中可能吗? 编辑: 查询A: 查询B: 查询切换的原因是,根据“术语”的流行程度,我得到的结果时间截然不同。 问题答案: 编辑: 我下面说的关于要求存储过程的说法是不正确的。尝试这个: 确实,这是一个case表达式,在存储的pr

  • 本文向大家介绍MongoDB查询以查找FirstName和LastName的字段组合?,包括了MongoDB查询以查找FirstName和LastName的字段组合?的使用技巧和注意事项,需要的朋友参考一下 以下是要查询的字段组合查询- 这将产生以下输出-

  • 正如我从“云火数据模型”指南中得到的,“每个文档都由一个名称标识。”是否可以通过该文档标识符(即名称或ID)查询集合? 例如,集合“Things”中的文档具有IDs、1、2等。: 是否可以查询 ID 小于 100 的文档?

  • 问题内容: 我在尝试执行查询时遇到了一些问题。我有两个表,一个表包含元素信息,另一个表包含与第一个表的元素相关的记录。想法是在同一行中获取元素信息以及多个记录信息。 结构可以这样解释: 这是我想要实现的: 以下查询可获得正确的结果,但对我而言似乎效率极低,必须为每个列迭代table2。无论如何,可以进行子查询并重用它吗? 问题答案: 您可以将聚合取出到CTE(公用表表达式)中: 当然,这实际上是什