我在Solr中实现了自动完成功能,但有一个问题。
对于自动完成,我正在使用
<fieldType name="text_auto" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
我认为LowerCaseFilter应该使Token Case不敏感,但这是错误的。事实上,只是在较小的情况下令牌,这意味着像“计算机”这样的查询将导致“计算机”,而“计算机”则不会。 实际上我希望计算机和Comput通向计算机。
我已经尝试过这个:
<fieldType name="text_auto_low" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
<fieldType name="text_auto_up" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldType>
由于某种原因,它也没有说出来。我的问题是为什么我能解决这个问题?
答案 0 :(得分:1)
Lucene有Analyzer类,您可以通过三种方式使用(实现):
现在,提出您的问题,我会推荐一种名为 ngram 的技术,它会拆分您的查询,然后搜索这些短语。因此,即使存在拼写错误,您仍然可以获得优异的结果。
要知道如何执行此操作,建议您阅读this以帮助您入门。它还有其他有关查询的重要信息。 这不仅可以解决您的问题,还可以增强您的应用。
玩得开心:D