我是Solr的初学者,并且遇到了不需要的字符进入查询结果的问题。例如,当我搜索“foo bar”时,我得到了“'foo'bar”等内容。我只想要完全匹配。据我所知,这可以在schema.xml文件中设置。 我的内容字段类型:
<fieldtype name="textNoStem" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<filter class="solr.LowerCaseFilterFactory"/>
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>
如果您知道解决方案,请告诉我。 亲切的问候。
答案 0 :(得分:14)
对于两个分析仪,第一行应该是标记化器。标记器用于将文本拆分为较小的单位(大多数时候是单词)。根据您的需要,WhitespaceTokenizerFactory可能是正确的选择。
如果您想要绝对精确匹配,则在标记生成器之后不需要任何过滤器。但是,如果您不希望搜索区分大小写,则需要添加LowerCaseFilterFactory。
请注意,您有两个分析器:一个是'index'类型,另一个是'query'类型。正如名称所暗示的那样,第一个用于索引内容,而另一个用于查询时。几乎总是好的规则是为两个分析器设置相同的标记器/过滤器集。
答案 1 :(得分:0)
如果您只想要完全匹配,请在查询时使用KeywordTokenizerFactory而不是StandardTokenizerFactory。
答案 2 :(得分:0)
我猜你没有得到任何结果,因为对已经编入索引的数据进行了不同的标记。 正如Pascal所说,whitespaceTokenizer是您的正确选择。在索引和查询时使用它,并在索引某些数据后检查结果,而不是先前索引的数据。
我建议使用分析页面来查看实际索引的结果。它非常有用。在架构中进行更改,刷新核心,转到分析页面并查看详细输出以获得逐步分析。