我有两个 question
已编制索引: FIRE_DETECTED
以及 SMOKE:DETECTED
ElasticSearch
目标
我想和你一起搜索 query = 'fire'
->结果:
FIRE_DETECTED query = 'dectected'
->结果: FIRE_DETECTED
以及 SMOKE:DETECTED
一些解决方案
在analyzer中添加更多设置
我们需要使用新设置创建一个新索引(添加令牌筛选器: word_delimiter_graph
)
重新索引
问题:如何在生产中添加设置而不影响客户?
在elasticsearch中再添加1个字段 filterd_question
拆分数据 :
以及 _
将拆分的数据保存在此文件夹中 filterd_question
领域
问题:我们还需要一个字段
最好的解决办法是什么(如果需要,添加更多解决方案)
2条答案
按热度按时间w6mmgewl1#
如果您不想更改/添加analyzer。您可以尝试使用通配符查询。尽管缺点是表演。
gkl3eglg2#
同样,在使用elasticsearch时,这是一个非常好且非常常见的场景,因为需求不断变化,为了支持需求,我们必须改变索引es中数据的方式。
你提到的这两种方法都是公司使用的,它们都有各自的优缺点,你必须根据自己的要求选择一种适合自己的方法。
更改/添加分析仪需要以下步骤才能正常工作:
关闭索引
添加/编辑分析器定义。
打开索引
重新编制所有文档的索引(您应该使用无停机时间的索引别名来高效地执行此操作,并将对最终用户的影响降至最低)
第四步之后,你的新搜索就可以了。
优点:它不会创建新的字段,因此会节省空间,因此更有效和更干净的方式做这个改变。
缺点是,根据文档的数量及其相对复杂的过程,重新编制索引可能需要大量时间。
添加自定义分析器,然后使用新添加的分析器添加新字段
在这种情况下,它还需要关闭/打开索引,除非您使用的是内置分析器,但在这种情况下,您的新文档或正在更新的文档将具有新字段,因此您根据新分析器/逻辑进行的搜索将带来部分结果,但这可以根据您的用例来确定。
优点:相对简单的方法,不需要在所有情况下完全重新索引。
缺点:额外的空间,如果旧的字段没有被使用,复杂度根据用例而变化。