我是Apache Solr的新手,正在尝试使用搜索词针对名为“ normalizedContents”且类型为“ text”的字段进行查询。
所有搜索词必须存在于该字段中。问题是,我得到的结果不一致。
例如,solr索引只有一个文档的normalizedContents字段值为=“ EDOUARD SERGE WILFRID EDOS0004 UNE MENTION COMPLEMENTAIRE”
我在solr的网络界面中尝试了以下查询:
normalizedContents:(edouard AND une)返回结果
normalizedContents:(edouar * AND une)返回结果
normalizedContents:(EDOUAR * AND une)不返回任何内容
normalizedContents:(edouar和une)不返回任何内容
normalizedContents:(edouar * AND un)返回结果(尽管没有“ un”字样)
normalizedContents:(edouar * AND uned)返回结果(尽管没有“ uned”一词)
这是schema.xml中normalizedContents的声明:
<field name="normalizedContents" type="text" indexed="true" stored="true" multiValued="false"/>
因此,通配符和AND运算符不会遵循预期的行为。我究竟做错了什么 ?
谢谢。
最佳答案
默认情况下,字段类型文本确实基于内容(solr.SnowballPorterFilterFactory
)。因此,“ un”和“ uned”与une相匹配。那么您可能在查询和索引分析器上都没有solr.LowerCaseFilterFactory
筛选器,因此EDUAR *不匹配。而且第4个不匹配,因为edouard并非源自edouar。如果您希望完全匹配,则应将数据复制到其他类型的字段中,该字段的类型具有一组更有限的过滤器。例如。只有一个solr.WhitespaceTokenizerFactory
从架构中发布<fieldType name="text">
部分可能有助于理解所有内容。