如何在Solr中使用SynonymFilterFactory?

时间:2012-04-03 17:38:12

标签: solr

我正在尝试在查询时执行同义词过滤,这样如果我搜索X,Y的结果也会显示出来。

我去Solr正在运行的地方,编辑.txt文件并在新行上添加X,Y。

这不起作用。我检查架构,我看到了:

<analyzer type="query">
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />

我错过了什么?

修改 评估配置文件

tomcat6 / Catalina / localhost 似乎指向了正确的位置

<Context docBase="/data/solr/solr.war" debug="0" privileged="true" allowLinking="true" crossContext="true">
  <Environment name="solr/home" type="java.lang.String" value="/data/solr" override="true" />
</Context>

另外,在Solr管理员中我看到了这一点。 cwd是什么意思?

cwd=/usr/share/tomcat6 SolrHome=/data/solr/ 

2 个答案:

答案 0 :(得分:2)

仅在索引时使用SynonymFilterFactory,而不是查询时间。在查询时,同义词有一些微妙但易于理解的问题。

请参阅:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

将同义词移动到索引分析器链后,检查它们是否正在使用管理UI中的“分析”页面。

答案 1 :(得分:1)

@Walter Underwood的回答很好,但不完整。

您是否在索引或查询时depends on your default operator使用SynonymFilterFactory。

所以,假设我们有一个带有此条目的同义词文件:

5,five

如果您的默认运算符为OR(默认默认运算符),则应在查询过滤器上设置同义词。这样,对于“5”的查询将作为“5”或“5”的查询传递给后端,并且后端将适当地响应。同时,您可以在不重新编制索引的情况下对同义词文件进行更改,并且索引较小,因为它不需要包含这么多令牌。

但是,如果您将默认运算符更改为AND,则应在索引过滤器上设置同义词。如果不这样做,对“5”的查询将作为“5”和“5”进入后端,并且它与预期的文档不匹配。唉,这使得索引更大,也意味着新的同义词需要完整的重新索引。

注意:documentation for this目前是错误的,遗漏了所有这些细节。