匹配“英国”到“英国,苏格兰等”在索尔

时间:2012-08-16 15:40:00

标签: solr synonym sunspot-solr

我在我的网站上使用Solr作为搜索引擎,除了同义词匹配外,一切顺利。

我的synonym.txt文件如下所示:

uk => united kingdom,england,scotland,wales

这适用于返回标记为“英国”的结果,但不适用于其他结果。如果我撤销订购,则不会返回“英国”结果。

我的字段类型如下所示:

<fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymFilterFactory" tokenizerFactory="solr.KeywordTokenizerFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
      </analyzer>
    </fieldType>

我对solr很新,所以非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

wiki中,建议仅在索引时使用SynonymFilter。另外,尝试将“expand”标志设置为true,这也是处理多字同义词的推荐方法。

答案 1 :(得分:0)

您在synonyms.txt中有2个运算符: =&gt; ,我猜您使用的是一个而不是另一个。

<强> =&GT;运算符正在替换另一个文本,这对标准化非常有用。优点:它不会增加您的索引,也不会增加歧义。缺点:您必须将过滤器应用于索引和查询。例外:不=>才不是 在结构上,您将一个文本替换为另一个文本,因此您不能拥有列表

,运算符会将一位文本扩展为所有其他文本。建议仅将其用于索引(所有同义词都将在索引中并与任何单词匹配)。缺点:它会增加你的索引。 ,运算符也可以仅在查询时使用,但在进行复杂查询时,行为可能很难预测,并且会降低您的请求速度。所以,不推荐。

要达到预期的行为,你应该写:
        英国,英国,英格兰,苏格兰,威尔士

请注意,根据所使用的标记器,可能存在与多字相关的一些问题(关于此字的已经很多):搜索“王国”将找到所有用英国索引的文档。这可能是预期的行为......或者不是。

附录:我刚刚意识到你可能想用“联合王国,英格兰,苏格兰,威尔士”取代“英国”作为文本。在这种情况下,你必须转义,(用\替换它,如果我的记忆是正确的)。同样,您的搜索结果将在很大程度上取决于它的标记方式。