2011-09-29 67 views
3

我正在solr中使用过去的搜索进行自动建议功能。 Synonyms.txt包含一个常见的拼写错误/拼写错误等列表。它设置为在索引上运行,并在管理员中使用anaysis工具,我可以看到它工作正常 - 但它似乎不适用于实时数据。这似乎并没有这样的情况(即使分析工具,说那是什么 -solr同义词不被解析

Field type : 
<field name="suggest_ngrams" type="text_ngram" indexed="true" stored="false" multiValued="true" /> 

Schema: 
<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrement="true"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> 
</analyzer> 
<analyzer type="query"> 
<tokenizer class="solr.KeywordTokenizerFactory"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrement="true"/> 
</analyzer> 

and an example of synonyms.txt 
watch, watches, watche, watchs => watch 

所以在索引时间我希望“watche”与“看”来代替它在做什么。

要清楚,如果我查询的Solr(q = WATC)短语“watche”出现在结果

任何意见或洞察力,将不胜感激,因为我觉得一切都设置correctl Ÿ

感谢

回答

1

如果我有问题正确: -
的同义词只在指数时使用,不影响存储的值。
所以你在分析中看到的是索引时间值,这似乎工作正常。
当您查询solr并且它与此结果相匹配时,结果将仅返回“watche”,因为这是存储的原始值。
存储的值永远不会被修改,并按原样保存并返回到响应中。

请澄清,如果我错了。

+0

那之前,应用过滤器的数据是什么林不知道 - 我的理解它的同义词过滤器应替换为“watche” '看',当它做索引。所以'watche'根本不应该在索引中,不应该被返回到结果中。 –

+0

#显式映射匹配“=>”的LHS上的任何标记序列,并替换RHS上的所有替代方案。这些类型的映射 #ignore模式中的扩展参数。 #示例: i-pod,i pod => ipod, 海洋饼干,海biscit => seabiscuit –

+0

因此,我读到的术语被替换,所以不应该出现在索引.... –

0

由于@Jayendra描述solr不会改变存储值。因此你应该找到另一种处理这个障碍的方法。 就我而言,我想出了一个使用facet的解决方案。如果您在该字段方面您收到索引值(映射)。

另一种方案是你可以在一个单独的进程将数据加载到Solr的