如何在 Elasticsearch 中或在 Lucene 级别进行联接

2024-03-17

在 Elasticsearch 中执行相当于 SQL 连接的最佳方法是什么?

我有一个包含两个大表的 SQL 设置:Persons 和 Items。 一个人可以拥有many项目。 人员和项目行都可以更改(即更新)。 我必须运行根据人和物品的各个方面进行过滤的搜索。

在 Elasticsearch 中,看起来您可以将 Person 设为 Item 的嵌套文档,然后使用has_child.

但是:如果您随后更新一个人,我认为您需要更新他们拥有的每个项目(可能很多)。

那是对的吗? Elasticsearch 有没有好的方法来解决这个查询?


正如已经提到的,要走的路是父母/孩子。关键是嵌套文档的性能非常好,但为了更新它们,您需要重新提交整个结构(父级+嵌套文档)。尽管嵌套文档的内部实现由单独的 lucene 文档组成,但这些嵌套文档不可见,也不能直接访问。事实上,当使用嵌套文档时,您需要使用适当的查询来访问它们(嵌套查询、嵌套过滤器、嵌套方面等)。

另一方面,父/子允许您拥有相互引用的单独文档,这些文档可以独立更新。它在性能和使用的内存方面有一定的成本,但它比嵌套文档更灵活。

正如中提到的本文 http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/不过,elasticsearch 帮助您管理关系这一事实并不意味着您必须使用这些功能。在许多复杂的用例中,最好在应用程序层上有一些处理关系的自定义逻辑。在方面,父/子也有限制:例如,您永远无法同时返回父和子,这与不允许仅返回匹配的子(目前)的嵌套文档相反。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Elasticsearch 中或在 Lucene 级别进行联接 的相关文章

  • 查询格式错误,查询名称后没有 start_object

    我正在针对 AWS Elasticsearch 5 1 运行此查询并收到格式错误的查询错误 这是请求的正文 我基本上只是检查该字段在时间范围内是否存在 query bool filter bool must range timestamp
  • 为什么这个 ElasticSearch 扫描和滚动不断返回相同的滚动 id?

    所以首先我运行以下命令 curl s XGET http localhost 9200 my index search scroll 1m search type scan size 10 这会返回一个滚动 ID 然后我在第一个滚动请求中使
  • 连接到 Elasticsearch Heroku 数据库

    我已经在 Heroku 上使用 Bonsai elasticsearch 插件设置了一个入门帐户 我正在尝试通过 Java 应用程序连接到它 但似乎无法通过 Transport Client 或 Elasticsearch 文档页面上解释的
  • Airflow log_id 格式错误

    我正在使用 Airflow v2 2 3 和apache airflow providers elasticsearch 2 1 0 在 Kubernetes 中运行 我们的日志会自动发送到 Elasticsearch v7 6 2 我在
  • Elasticsearch 中的组合非嵌套和嵌套查询

    我想使用 ES 进行书籍搜索 所以我决定将作者姓名和标题 作为嵌套文档 放入索引中 如下所示 curl XPUT localhost 9200 library search books 1 d author one books title
  • Symfony 2 中的连接表

    我刚刚开始在 Symfony 2 中进行面向对象编程 并且在连接 mysql 表时遇到问题 我有两张桌子 kommuner id 名称 容量 活动 id 姓名 kommune id 如何在实体文件中加入这些表 这是我在 DefaultCon
  • redis能完全取代mysql吗?

    简单的问题 我是否可以使用 redis 而不是 mysql 来处理各种 Web 应用程序 社交网络 地理位置服务等 IT 领域没有什么是不可能的 但有些事情可能会变得极其复杂 将键值存储用于全文搜索之类的事情可能会非常痛苦 另外 据我所知
  • Logback 与 Elasticsearch 直接集成

    我有带有 slf4j logback 的 Spring Boot 应用程序 并寻找集中式日志记录解决方案 现在我发现我不需要使用日志收集器 比如logstash filebeat rsyslog 有直接收集器Ingest Node在 Ela
  • Elasticsearch 将字符串与模糊字段相匹配

    我正在尝试将字符串与字段匹配 并且只想应用模糊性 例如 对于这些文档 title replace oilfilter title replace motoroil 以下查询应仅匹配第一个文档 Replace oilfilter Replac
  • 如何在 DSL 中的术语查询内添加建议

    我的文档如下 id 1 name sachin messi description email protected cdn cgi l email protection type football var sports id 2 name
  • 在 Elasticsearch Nest 查询中加载特定字段

    该文档似乎表明我可以返回字段的子集而不是整个文档 这是我的代码 var result client Search
  • 我们可以使用什么方法来重塑非常大的数据集?

    当由于非常大的数据计算将花费很长时间并且因此我们不希望它们崩溃时 事先知道要使用哪种重塑方法是很有价值的 Lately methods for reshaping data have been further developed regar
  • 如何查找elasticsearch 6.2.1中存在的索引?

    我试图检查elasticsearch 6 2 1的RestHighLevelClient中是否存在索引 目前我正在使用以下代码 try OpenIndexRequest openIndexRequest new OpenIndexReque
  • Codeigniter 加入多个条件

    我正在使用 Codeigniter Active Records 课程 我想加入我的users与我的桌子clients表 这样我就可以显示用户的 真实 姓名 而不仅仅是他们的 ID 这是什么clients表看起来像 示例 列 a 1 a 2
  • Elasticsearch 聚合过滤器

    因为我在谷歌上找不到任何东西 是否可以在elasticsearch中过滤聚合 我正在考虑这样的事情 获取 SOME object X gt 100 的所有对象 提前致谢 编辑 样本数据 我有以下文档结构 docKey 1 value 2 d
  • 静态加密数据时 ElasticSearch 的工作原理

    我的数据存在于 DynamoDB 中 为了启用全文搜索 我使用 Lambda 函数将其转发到 ES 索引 但如果可能的话 我希望在不影响搜索效率的情况下对数据进行加密 但我不确定我的搜索在这里如何进行 我找不到任何文档 文章来说明当数据静态
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • 按存储桶键值过滤 Elasticsearch 聚合

    我有一个 Elasticsearch 文档索引 其中有一个包含 URL 列表的字段 正如预期的那样 对该字段进行聚合可以计算出唯一 URL 的数量 GET models search query match all size 0 aggs
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

    我正在尝试在 Rails 应用程序中使用 Elasticsearch 设置 CircleCI 我想已经配置了镜像 但是如何在 CI 中连接到它 到目前为止我已经尝试过 https github com elastic elasticsear

随机推荐