我正在使用solr中的过去搜索来制作自动推荐功能。 Synonyms.txt包含常见拼写错误/拼写错误等列表。它设置为在索引上运行并使用管理员中的anaysis工具我可以看到它正常工作 - 但它似乎不适用于实时数据。
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”被“watch”取代 - 这似乎并非如此(即使分析工具说它正在做什么。
要清楚,如果我查询solr(?q = watc),结果中会出现“watche”这个短语
任何想法或见解都会受到赞赏,因为我认为一切都设置正确
由于
答案 0 :(得分:1)
如果我的问题是正确的: - 同义词仅在索引时使用,不会影响存储的值 所以你在分析中看到的是索引时间值,它似乎工作得很好 当您查询solr并且它与此结果匹配时,结果将仅返回“watche”,因为这是存储的原始值。 存储的值永远不会被修改,并按原样存储并在响应中返回。
请澄清我是否弄错了。
答案 1 :(得分:0)
正如@Jayendra所描述的那样,solr不会改变存储值。因此,你应该找到另一种处理这个障碍的方法。 在我的情况下,我想出了一个使用facet的解决方案。如果您在该字段上进行分面,则会收到索引值(已映射)。
另一个解决方案是您可以在将数据加载到Solr之前,在单独的流程中将过滤器应用于数据