1

使用 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”?

4

2 回答 2

2

该类型text_general可能被配置为使用一个词干分析器,它被Loc视为Location.

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

于 2012-09-06T02:58:39.427 回答
0

这可能就是原因。

查询的这一部分names:Dev+Location仅搜索names:Dev由于该Location术语没有字段名称限定符而针对schema.xml 中设置的Location任何内容进行搜索的位置<defaultSearchField>

因此,您可以尝试引用该字段names:"Dev Location"或为其添加前缀names:Dev AND names:Location

于 2012-09-06T22:48:15.373 回答