【发布时间】:2011-08-02 23:38:18
【问题描述】:
我已经实现了 solr 搜索,一切正常。只是一个快速的问题。当用户在我们的数据库中搜索例如新本田思域。 Solr 只会返回包含所有三个关键字“New”、“Honda”和“Civic”的结果。
如何让 solr 返回包含所有三个关键字 NEW HONDA CIVIC 以及较少关键字(即 HONDA CIVIC)的结果。
【问题讨论】:
我已经实现了 solr 搜索,一切正常。只是一个快速的问题。当用户在我们的数据库中搜索例如新本田思域。 Solr 只会返回包含所有三个关键字“New”、“Honda”和“Civic”的结果。
如何让 solr 返回包含所有三个关键字 NEW HONDA CIVIC 以及较少关键字(即 HONDA CIVIC)的结果。
【问题讨论】:
您需要确保您的架构以分析器可以将其分解为更小的术语的方式定义字段。例如:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
StandardTokenizerFactory 会将您的文本分解为单词。 StandardFilterFactory 删除首字母缩写词中的点和标记末尾的 's。 LowerCaseFilterFactory 摆脱了大写的麻烦。 StopFilterFactory 删除常见的英文单词。 PorterStemFilterFactory 规范化以 -ing、-es 和此类后缀结尾的单词。
如果你只是使用:
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="false"/>
您只能匹配整个字符串。
您需要重新编制索引才能使这些更改生效。有关 Solr 如何处理数据以进行索引和查询的数据的更多信息,请查看:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
【讨论】: