Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails SOLR:synonyms.txt文件中的更改是否可以在不重新索引的情况下生效?_Ruby On Rails_Indexing_Solr_Sunspot_Sunspot Solr - Fatal编程技术网

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

Ruby on rails SOLR:synonyms.txt文件中的更改是否可以在不重新索引的情况下生效?,ruby-on-rails,indexing,solr,sunspot,sunspot-solr,Ruby On Rails,Indexing,Solr,Sunspot,Sunspot Solr,我们使用的是太阳黑子solr 4.0,当我更新同义词文件时,它不会改变搜索中的任何内容在synonyms.txt中进行更改后,我真的需要重新编制索引吗?还是有其他方法更新我丢失的同义词文件?这取决于扩展同义词的时间。如果在查询时进行扩展,则更新将可见,而无需任何重新索引,但是如果在索引时进行扩展(这是推荐的方法),则必须重新索引以获取索引中包含的新同义词 与查询时间相比,建议在索引时间进行扩展的原因如下: 这是因为在查询时可能出现两个潜在问题: Lucene QueryParser在向分析器提供

我们使用的是太阳黑子solr 4.0,当我更新同义词文件时,它不会改变搜索中的任何内容在synonyms.txt中进行更改后,我真的需要重新编制索引吗?还是有其他方法更新我丢失的同义词文件?

这取决于扩展同义词的时间。如果在查询时进行扩展,则更新将可见,而无需任何重新索引,但是如果在索引时进行扩展(这是推荐的方法),则必须重新索引以获取索引中包含的新同义词

与查询时间相比,建议在索引时间进行扩展的原因如下:

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

Lucene QueryParser在向分析器提供任何文本之前在空白处标记,因此,如果一个人搜索单词sea biscit,分析器将分别获得单词“sea”和“biscit”,并且不知道它们是否匹配同义词

短语搜索(即:“sea-biscit”)将导致QueryParser将整个字符串传递给分析器,但是如果同义词过滤器配置为展开同义词,那么当QueryParser从分析器获得结果标记列表时,它将构造一个不会产生预期效果的多短语。这是因为分析器用于指示两个术语占据相同位置的机制有限:无法指示“短语”占据与术语相同的位置。在我们的示例中,生成的多短语将是“(sea | sea | seabricit)(biscit | biscit)”,这与文档中出现的简单“seabricit”情况不匹配

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

带有“text”字段的索引,在查询时使用同义词TV、television和expand=“true”的同义词过滤器 数千份包含“文本:电视”一词的文档 数百份包含“文本:电视”一词的文件 对于text:TV的查询将扩展为(text:TV text:TV),对于text:TV,较低的docFreq将为匹配“TV”的文档提供比匹配“TV”的文档高得多的分数,这对客户端来说可能有点违反直觉。索引时间扩展(或缩减)将导致所有文档的idf相同,无论原始文本包含哪个术语

有一个非常详细的解释,什么是实际发生的幕后可用的


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

这取决于您何时扩展同义词。如果在查询时进行扩展,则更新将可见,而无需任何重新索引,但是如果在索引时进行扩展(这是推荐的方法),则必须重新索引以获取索引中包含的新同义词

与查询时间相比,建议在索引时间进行扩展的原因如下:

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

Lucene QueryParser在向分析器提供任何文本之前在空白处标记,因此,如果一个人搜索单词sea biscit,分析器将分别获得单词“sea”和“biscit”,并且不知道它们是否匹配同义词

短语搜索(即:“sea-biscit”)将导致QueryParser将整个字符串传递给分析器,但是如果同义词过滤器配置为展开同义词,那么当QueryParser从分析器获得结果标记列表时,它将构造一个不会产生预期效果的多短语。这是因为分析器用于指示两个术语占据相同位置的机制有限:无法指示“短语”占据与术语相同的位置。在我们的示例中,生成的多短语将是“(sea | sea | seabricit)(biscit | biscit)”,这与文档中出现的简单“seabricit”情况不匹配

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

带有“text”字段的索引,在查询时使用同义词TV、television和expand=“true”的同义词过滤器 数千份包含“文本:电视”一词的文档 数百份包含“文本:电视”一词的文件 对于text:TV的查询将扩展为(text:TV text:TV),对于text:TV,较低的docFreq将为匹配“TV”的文档提供比匹配“TV”的文档高得多的分数,这对客户端来说可能有点违反直觉。索引时间扩展(或缩减)将导致所有文档的idf相同,无论原始文本包含哪个术语

有一个非常详细的解释,什么是实际发生的幕后可用的


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

谢谢。但是重新索引数百万条记录是很耗时的,我们可以如何减少时间呢?只需重新索引受同义词影响的文档:-)@MatsLindh我无法理解这一行“(sea | sea | seacibuit)(biscit | biscit)”,它与文档中出现的简单“seacibuit”不匹配。因为“Seabitch”在多短语查询中存在。@user2478236但是短语查询也需要第二个术语(“biscit”)来匹配-这就是问题所在