【问题标题】:Inconsistent Apache Solr query resultsApache Solr 查询结果不一致
【发布时间】:2011-06-27 13:56:59
【问题描述】:

我是 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 AND 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 运算符不符合预期的行为。我做错了什么?

谢谢。

【问题讨论】:

  • 您是否对 normalizedContents 应用了任何令牌过滤器?第三行可以用小写过滤器解决,最后两行用 WS 过滤器(空白)。

标签: java lucene solr


【解决方案1】:

默认情况下,字段类型 text 确实基于内容 (solr.SnowballPorterFilterFactory)。因此 'un' 和 'uned' 匹配 une。那么您可能在查询和索引分析器上都没有 solr.LowerCaseFilterFactory 过滤器,因此 EDUAR* 不匹配。并且第 4 个不匹配,因为 edouard 不是源于 edouar。如果您想要完全匹配,您应该将数据复制到另一个字段中,该字段的类型具有更有限的过滤器集。例如。只有solr.WhitespaceTokenizerFactory

从您的架构中发布 &lt;fieldType name="text"&gt; 部分可能有助于理解所有内容。

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多