我们正在使用 Sunspot-solr 4.0 ,当我更新同义词文件时,它不会改变搜索中的任何内容。 在synonyms.txt中进行更改后是否真的需要重新编制索引,还是有任何其他技巧来更新我遗漏的同义词文件?
答案 0 :(得分:3)
这取决于你何时扩展同义词。如果您在查询时进行扩展,则更新将在没有任何重新索引的情况下显示,但如果您在索引时进行扩展(这是推荐的方式),则您必须重新索引以获取新的同义词包含在索引中。
与查询时间相比,在索引时推荐扩展的原因是described in the old wiki:
这是因为在查询时可能会出现两个潜在的问题:
Lucene QueryParser在向分析器提供任何文本之前在空格上进行标记,因此如果一个人搜索单词sea biscit,分析器将被赋予单词" sea"和" biscit"单独地,并且不会知道它们是同义词。
短语搜索(即:" sea biscit")将导致QueryParser将整个字符串传递给分析器,但是如果SynonymFilter配置为扩展同义词,那么当QueryParser获取结果列表时从分析器返回的令牌,它将构造一个不具有所需效果的MultiPhraseQuery。这是因为分析仪可用的机制有限,表明两个术语占据相同的位置:没有办法表明一个"短语"占据与术语相同的位置。对于我们的例子,得到的MultiPhraseQuery将是"(sea | sea | seabiscuit)(饼干| biscit)"这与" seabiscuit"的简单案例不符。在文档中出现
即使您不担心多词同义词,idf差异仍然会使索引时间同义词成为一个好主意。请考虑以下情形:
带有"文字"的索引字段,在查询时使用SynonymFilter与同义词TV,Televesion和expand =" true" 成千上万的文档包含术语"文本:TV" 几百个包含术语"文本:电视" 对文本的查询:电视将扩展为(文本:电视文本:电视)和较低的docFreq文本:电视将提供符合电视"一个更高的分数然后匹配" TV"相比之下 - 这可能与客户有点相反。索引时间扩展(或缩减)将导致所有文档的idf相同,无论原始文本包含哪个术语。
对Better synonym handling in Solr中可用的幕后实际发生的事情进行了非常详细的解释。
只要您了解这些问题并进行权衡,查询时间同义词可以正常工作 - 但您必须针对您的查询进行测试,以及您希望结果是什么 - 并注意陷阱。