【问题标题】:Solr search is returning partial string matchesSolr 搜索返回部分字符串匹配
【发布时间】:2012-09-07 06:48:15
【问题描述】:

使用 Solr 3.6.1,我的 schema.xml 中有这个字段:

<field name="names" type="text_general" indexed="true" stored="false" multiValued="true"/>
<dynamicField name="names_*" type="text_general" indexed="true" stored="true"/>

schema.xml 中的文档指出“text_general”应该:

  • 使用 StandardTokenizer 进行标记
  • 从不区分大小写的“stopwords.txt”(当前为空)中删除停用词
  • 向下大小写字符串。
  • 仅在查询时,它也应用同义词(此时也为空)

我在 Solr 中使用该字段的数据索引了两个文档:

<!-- doc 1 -->
<str name="names_data">Name ABC Dev Loc</str> 

<!-- doc 2 -->
<str name="names_data">Name ABC Dev Location</str>

当我执行以下查询时:

id:(doc1 OR doc2) AND names:Dev+Location)

两个文件都被退回。根据我对 Solr 的 StandardTokenizer 工作原理的理解,我预计只会返回 doc2。

为什么“Dev+Location”匹配“Dev Loc”和“Dev Location”?

【问题讨论】:

    标签: java solr lucene


    【解决方案1】:

    text_general 类型可能被配置为使用stemmer,它将Loc 视为Location 的变体。

    您可以将类型配置为使用词干分析器,或尝试使用names:"Dev Location"搜索整个字符串

    【讨论】:

      【解决方案2】:

      这可能就是原因。

      查询names:Dev+Location 的这一部分只搜索names:Dev 的位置,因为Location 术语没有字段名称限定符,它正在搜索Location,而不是&lt;defaultSearchField&gt; 在架构中设置的任何内容。 xml

      因此您可以尝试引用 names:"Dev Location" 之类的字段或在其前面添加前缀 names:Dev AND names:Location

      【讨论】:

        猜你喜欢
        • 2015-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-05-15
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        相关资源
        最近更新 更多