设置Solr NOT以匹配查询的所有关键字

时间:2011-08-02 23:38:19

标签: lucene solr solrnet

我已经实施了solr搜索,一切正常。只是一个简单的问题。当用户在我们的数据库中搜索例如新本田思域。 Solr只会返回包含所有三个关键字“New”,“Honda”和“Civic”的结果。

我如何让solr返回包含所有三个关键字NEW HONDA CIVIC的结果以及更少的关键字,即HONDA CIVIC。

1 个答案:

答案 0 :(得分:3)

您需要确保您的架构以分析器可以将其分解为更小的术语的方式定义字段。例如:

<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从标记的末尾删除首字母缩略词中的点。 LowerCaseFilterFactory摆脱了大写的困境。 StopFilterFactory删除常见的英语单词。 PorterStemFilterFactory规范化具有结尾的单词,如-ing,-es和此类后缀。

如果您只是使用:

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="false"/>

您只能匹配整个字符串。

您需要重新索引才能使这些更改生效。有关Solr如何处理索引数据和查询数据的更多信息,请查看:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters