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

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

我有2个question的索引分别为:Elasticsearch中的FIRE_DETECTEDSMOKE:DETECTED

目标

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

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

某些解决方

  1. 在分析仪中添加更多设置
  • 我们需要使用新设置(添加令牌过滤器:word_delimiter_graph)创建新索引
  • 重新索引
  • 问题:如何在不影响客户的情况下在生产中添加设置?
  1. 再向Elasticsearch filterd_question添加1个字段
  • 使用:_拆分数据
  • 在此filterd_question字段中保存拆分的数据
  • 问题:我们还需要1个字段

什么是最佳解决方案? (如有需要,添加更多解决方案)

解决方法

同样,在使用Elasticsearch时这确实是一种非常常见的情况,并且随着需求不断变化,并且为了支持这些变化,我们必须更改在ES中索引数据的方式。

您提到的两种方法都是公司使用的,它们都有自己的传统,您必须根据自己的要求选择一种。

更改/添加分析仪将需要执行以下步骤才能使其工作:

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

优点:它不会创建新字段,因此可以节省空间,因此可以更有效,更干净地进行此更改。

基于文档的数量及其相对复杂的过程,重新索引可能会花费大量时间。

添加自定义分析器,然后使用新添加的分析器添加新字段

在这种情况下,除非您使用内置分析器,否则还需要关闭/打开索引,但是在这种情况下,您的新文档或正在更新的文档将具有新的字段,因此您需要根据新的分析器进行搜索/ logic将带来部分结果,但这可以根据您的用例而定。

优点:相对简单的方法,不需要在所有情况下都进行完全重新索引。

缺点:如果不使用旧字段并且复杂度根据用例而有所不同,则会有额外的空间。

,

如果您不想更改/添加分析仪。您可以尝试使用通配符查询。尽管缺点是性能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?