在 Elasticsearch 中更改设置的最佳解决方案

Best solution for changing settings in Elasticsearch

我有 2 question 已编入索引:FIRE_DETECTEDSMOKE:DETECTED 在 Elasticsearch

目标

我想用 query = 'fire' 搜索 -> 结果:FIRE_DETECTED

query = 'dectected' -> 结果:FIRE_DETECTEDSMOKE:DETECTED

一些解决方案

  1. 在分析器中添加更多设置
  1. 在 Elasticsearch 中再添加 1 个字段 filterd_question

最好的解决方案是什么? (如果需要,添加更多解决方案)

同样,在使用 elasticsearch 时,这确实是一个非常好的且非常常见的场景,并且随着需求不断变化,为了支持它们,我们必须改变我们在 ES 中索引数据的方式。

你提到的这两种方法都有公司使用,它们都有自己的trad-offs,你必须根据你的要求选择一种适合你的方法。

Change/add 分析器需要执行以下步骤才能正常工作:

  1. 关闭索引
  2. Add/Edit 分析器定义。
  3. 打开索引
  4. 重新索引所有文档(您应该使用 index alias with zero down time 来有效地做到这一点并将对 end-users 的影响降到最低)
  5. 在第 4 步之后,您的新搜索将起作用。

优点:它不会创建新字段,因此可以节省 space,从而更有效、更简洁地进行此更改。

缺点是 re-index 可能会花费很多时间,具体取决于文档的数量及其相对复杂的过程。

添加一个custom-analyzer然后使用新添加的分析器添加一个新字段

在这种情况下,它也需要 closing/opening 索引,除非您使用的是内置分析器,但在这种情况下,您的新文档或正在更新的文档将具有新字段,因此您的搜索根据新 analyzer/logic 会带来部分结果,但根据您的 use-case.

这可能没问题

优点:方法相对简单,在所有情况下都不需要 full-re 索引。

缺点:额外的 space,如果未使用旧字段并且复杂性根据 use-cases 变化。

如果你不想change/add分析器。您可以尝试使用通配符查询。虽然缺点是性能。