solr synonyms.txt文件中的更改是否可以在不重新索引的情况下生效?

pxy2qtax  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(149)

我们正在使用Sunspot-solr 4.0,当我更新同义词文件时,它不会更改搜索中的任何内容。在synonyms.txt中进行更改后,我真的需要重新编制索引吗?

ecbunoof

ecbunoof1#

这取决于何时展开同义词。如果在查询时展开,则无需重新编制索引即可看到更新,但如果在索引时展开(这是推荐的方式),则必须重新编制索引以获取索引中包含的新同义词。
推荐在索引时而不是查询时进行扩展的原因在旧维基中有描述:
这是因为在查询时可能会出现两个潜在问题:
Lucene QueryParser在将任何文本提供给分析器之前会对白色进行标记化,因此,如果用户搜索单词sea biscit,分析器将分别获得单词“sea”和“biscit”,并且不会知道它们是否匹配同义词。
短语搜索(即:“sea biscit”)将导致QueryParser将整个字符串传递给分析器,但如果SynonymFilter被配置为展开同义词,则当QueryParser从分析器中获取生成的标记列表时,它将构造一个MultiPhraseQuery,而该MultiPhraseQuery将不会产生预期的效果。这是因为分析器用于指示两个术语占据相同位置的机制有限:没有办法指出“短语”与术语占据相同的位置。对于我们的示例,得到的MultiPhraseQuery将是“(sea|浪|海饼干|biscit)”,这与文档中出现的“seabiscuit”的简单情况不匹配
即使你不担心多词同义词,idf的差异仍然使索引时间同义词成为一个好主意。
带有“text”字段的索引,在查询时使用同义词TV、Television和expand=“true”的SynonymFilter。成千上万的文档包含术语“text:TV”,几百个文档包含术语“text:Television”。对text:TV的查询将扩展为(text:TV text:Television),而对text:Television的较低docFreq将给予匹配“Television”的文档一个比匹配“TV”的文档高得多的分数--这对客户端来说可能有点违反直觉。索引时间扩展(或减少)将为所有文档产生相同的idf,而不管原始文本包含哪个术语。
Better synonym handling in Solr中有一个非常详细的解释,说明了在幕后实际发生的事情。
只要您了解这些问题和权衡,查询时间同义词就可以很好地工作--但是您必须针对查询和预期结果进行测试--并了解其中的陷阱。

相关问题