gpt4 book ai didi

search - ElasticSearch:索引与类型和处理更新

转载 作者:行者123 更新时间:2023-12-02 22:22:59 26 4
gpt4 key购买 nike

我对ElasticSearch的功能及其优势非常熟悉,但这是我第一次不习惯构建索引。因此,我急切希望与专家一起审查以下方法。

要求:

我们的应用程序从多个来源获取有关各种产品的元数据。通常,这些提要以XML文件的形式出现(文件大小可以从2 GB到12 GB不等,有时单个记录分布在多个文件中),并且一个提供者的提要中包含的信息可能与其他提供者所包含的信息重叠或不重叠。 。因此,我们根据产品类型对这些数据进行重复数据删除,并将其标准化为一组通用格式,并且我们需要提供针对此合并数据集进行搜索的功能(显然,这是ElasticSearch的用处)。

所有产品都有某些通用标识符(例如ID,价格等),但是核心元数据在不同产品类型之间看起来可能完全不同。为了对此进行量化,我们假设所有产品在通用字段中都有30%的字段,而不同产品类型之间有70%的字段不同。产品类型没有太多,可以安全地假设在任何时间点产品类型都不超过10种。首先,数字要小得多(大约3-4)。

此外,这些数据源可能会随机出现更新,并且其中一些更新需要立即(接近实时)反射(reflect)在搜索中,而不会降低搜索能力。

提议的解决方案:

根据我在此处阅读的内容,我正在考虑针对不同的产品类型使用不同的索引:https://www.elastic.co/blog/index-vs-type。因此,规范化工作将查看源文件,为给定产品类型创建规范化的结构,并将其添加到适当的索引中。我们公开的搜索API将针对使用的搜索词针对这些索引中的每个索引执行搜索,并将结果合并为包含多个部分(每种产品类型一个部分)的单个JSON响应。

对于更新,我们计划使用批量API进行更新,插入和删除,并且鉴于REST API调用的局限性,我们将必须以每个x MB的批次进行这些调用。

问题:

这是组织数据并在ElasticSearch中更新数据的最佳方法(针对我的用例)吗?最好在同一索引上使用多个类型(例如:/ products包含typeA,typeB等产品的产品),而不是为每种产品类型创建一个索引?如果是这样,搜索是否会比跨索引搜索快得多?创建索引后,是否有更好的方法来处理记录的CRUD?

提前致谢!

最佳答案

首先,值得注意的是下一个ES版本中的mapping types will go away(ES 6中的软弃用和ES 7中的删除)。

现在,不管类型是否消失,仍然可以使用单个索引,但是由于只有30%的字段是通用字段,而should be avoided不惜一切代价,因此您将提高稀疏性。

因此,我想说,鉴于数据的性质,您的多索引方法是唯一有意义的方法。

值得阅读的其他信息:https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html

关于search - ElasticSearch:索引与类型和处理更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com