使用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”应该:
我在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”匹配?
答案 0 :(得分:2)
类型text_general
可能已配置为使用stemmer,即将Loc
视为Location
的变体。
您可以将类型配置为不使用词干分析器,或尝试使用names:"Dev Location"
答案 1 :(得分:0)
这可能是原因。
查询names:Dev+Location
的这一部分仅搜索names:Dev
的位置,因为Location
字词没有字段名称限定符,它正在针对Location
搜索<defaultSearchField>
{1}}设置为schema.xml
因此,您可以尝试引用names:"Dev Location"
之类的字段或前缀names:Dev AND names:Location