如何根据频繁更改的分组拓扑编制索引和管理文档?



将客户视为可搜索的实体。此客户属于一个单位。所以我将unitId添加到customer类型中。一个单元可以属于一个或多个组,组可以有父组。

例如:

  • unit1属于texas组的子项usa组的组子项north-america组的子项
  • unit1也属于home-applianceseletronic-stores组子项
  • unit1也属于mall-stores

我想根据单位组搜索客户。但是,分组拓扑经常更改以适应管理需要。在这种情况下,我想出了 2 个选项:

  • 向文档添加groupIds,并在拓扑更改时重新索引所有受影响的客户,并在每个客户中填充正确的groupIds

    • 搜索速度更快,但对拓扑的更改成本更高。

    • 重新索引会影响搜索响应。

  • 处理索引外的单元分组,并按一组 UnitId 进行搜索。

    • 搜索始终必须包含 2 个步骤:获取组的 unitId 和搜索文档。

    • 查询可能会变得非常大:"filter" : "terms" : { "unitId" : [1, 2, 3... 99999 ] }

他们两个似乎都不是一个好的选择。那么,如何使用 ElasticSearch 根据频繁更改的分组拓扑来索引和管理文档呢?

Elasticsearch 并不喜欢频繁更改的数据。每次更新文档时,它都会有效地将旧文档标记为过时并创建一个新文档,然后每隔一段时间运行一些碎片整理例程。

如果您的用例不能容忍搜索结果在一段时间内过时,则必须使用第二条路径。我们一直在运行包含数万个参数的 ES 查询;表现不是很好,但也不可怕。

如果你能承受索引的一些延迟,我可能会尝试对这两种方式进行基准测试,并试图弄清楚这些权衡有多大。也许您可以只过滤与更改单位相关的文档,而且数量不会很大,您可以每晚、每小时或每 10 分钟重新索引它?

最新更新