0

我在我的网站中使用 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 很陌生,所以非常感谢任何帮助!

4

2 回答 2

2

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

于 2012-08-16T19:44:20.493 回答
0

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

=> 运算符正在用另一个文本替换一个文本,这对于规范化非常有用。优点:它不会增加您的索引,也不会增加歧义。缺点:您必须将过滤器应用于索引和查询。Exple: doesn't => does not Structurally,你用另一个文本替换一个文本,所以你不能有一个列表

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

要获得预期的行为,您应该写:
uk,united Kingdom,england,scotland,wales

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

附录:我刚刚意识到您可能希望将“uk”替换为“united Kingdom,england,scotland,wales”作为文本。在这种情况下,您必须对 , 进行转义(如果我的记忆正确,请将其替换为 \)。同样,您的搜索结果将在很大程度上取决于它的标记方式。

于 2013-08-07T11:18:49.520 回答