对synonym .txt文件的修改是否可以不重新索引而生效?



当我更新同义词文件时,我们正在使用Sunspot-solr 4.0,它不会改变搜索中的任何内容。在对synonys .txt进行更改后,我是否真的需要重新索引,或者是否有其他技巧可以更新我缺少的同义词文件?

这取决于您何时扩展同义词。如果你在查询时扩展,更新将是可见的,没有任何索引,但如果你在索引时扩展(这是推荐的方式),你将不得不重新索引,以获得新的同义词包括在索引。

推荐在索引时与查询时进行扩展的原因在旧wiki中有描述:

这是因为在查询时可能出现两个潜在的问题:

Lucene QueryParser在向分析器提供任何文本之前对空白进行标记,因此如果一个人搜索单词sea饼干,分析器将得到单词"sea" sea";"one_answers";biscit",并且不会知道它们是否匹配同义词。

短语搜索(即:"sea biscit")将导致QueryParser将整个字符串传递给分析器,但如果SynonymFilter被配置为扩展同义词,那么当QueryParser从分析器获得令牌的结果列表时,它将构造一个不会有预期效果的MultiPhraseQuery。这是因为Analyzer用于指示两个术语占用相同位置的机制有限:没有办法指示"短语";与术语占据相同的位置。对于我们的例子,得到的MultiPhraseQuery将是"(sea | sea | seabbiscuit) (biscuit | biscuit) "这与"海饼干"的简单情况不相符。出现在文档

即使您不担心多词同义词,idf差异仍然使索引时间同义词成为一个好主意。考虑以下场景:

带有"text"字段,该字段在查询时使用同义词TV, television并扩展="true"成千上万的文档包含术语"文本:电视"。几百个包含"文本:电视"这一术语的文档对于text:TV的查询将展开为(text:TV text:Television),而对于text:Television的较低的docFreq将给出与"Television&quot匹配的文档。比匹配"电视"的文档得分高得多。这对客户来说可能有点反直觉。索引时间扩展(或减少)将导致所有文档的idf相同,而不管原始文本包含哪个术语。

Solr中更好的同义词处理中有对幕后实际发生的事情的非常详细的解释。

只要您意识到这些问题和权衡,使用查询时间同义词就可以很好地工作-但是您必须针对您的查询和您期望的结果进行测试-并且要意识到陷阱。

最新更新