2012-08-16 28 views
0

我在我的网站中使用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所以任何帮助深表感谢!

+1

您是否尝试使用[调试功能](http://wiki.apache.org/solr/CommonQueryParameters#Debugging)Solr Debugging Ex:../?q=keyword&debugQuery=true。您可以使用分析页面http:// /solr/admin/analysis.jsp?highlight=on查看字段类型和数据的行为。 – mailboat 2012-08-16 15:59:45

回答

2

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

0

你有2个运营商在synonyms.txt:=>,我猜您正在使用的,而不是其他。

=>运营商正在用另一个文本取代一个文本,这对于规范化非常有用。优点:它不会增加您的索引并且不会增加含糊性。缺点:您必须将过滤器应用于索引和查询。 Exple:不=>不 Structuraly,更换另一个文本一文,所以你不能有一个列表

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

对有预期的行为,你应该写:
英国,英国,英格兰,苏格兰,威尔士

要注意的是取决于所使用的标记生成器,有可能涉及到多字的一些问题(已经有很多关于这方面的内容了):搜索“王国”将查找所有与英国索引的文件。这可能是预期的行为...或者不是。

附录:我刚才意识到你可能想用“英国,英格兰,苏格兰,威尔士”代替“英国”作为文本。在这种情况下,你必须逃避,(如果我的记忆是正确的,用\代替)。再一次,你的搜索结果将很大程度上取决于它是如何标记的。