3

我正在使用 solr 中的过去搜索来制作自动建议功能。Synonyms.txt 包含常见拼写错误/拼写错误等的列表。它设置为在索引上运行并使用管理员中的分析工具我可以看到它工作正常 - 但它似乎不适用于实时数据。

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”出现在结果中

任何想法或见解都会受到赞赏,因为我认为一切都设置正确

谢谢

4

2 回答 2

1

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

请澄清我是否弄错了。

于 2011-09-29T10:54:13.467 回答
0

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

另一种解决方案是您可以在将数据加载到 Solr 之前在单独的进程中将过滤器应用于数据

于 2015-01-03T16:43:17.537 回答