【问题标题】:Set Solr NOT to match all keywords of query设置 Solr 不匹配查询的所有关键字
【发布时间】:2011-08-02 23:38:18
【问题描述】:

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

如何让 solr 返回包​​含所有三个关键字 NEW HONDA CIVIC 以及较少关键字(即 HONDA CIVIC)的结果。

【问题讨论】:

    标签: lucene solr solrnet


    【解决方案1】:

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

    <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

    【讨论】:

    • 我们不能使用 OR 作为默认运算符来实现这一点吗?
    • 这是一个很好的观点,Peter 需要确保他使用 OR 作为 defaultOperator(在 schema.xml 中指定)。但是,由于 OR 是 defaultOperator 的默认值,我有点假设这就是他的架构的设置方式。即使使用 OR 作为默认运算符,文本字段仍应进行标记以匹配单个单词。
    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2023-01-13
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多