运行搜索时,例如:
field_name:#
field_name:"#"
field_name:"\#"
其中有一个值为“#”的记录,Solr返回0行。
我们必须使用的解决方法是使用范围查询 字段如:
field_name:[# TO #]
并返回正确的文档。
用例详细信息: 我们有一个字段索引文本字段并计算“字母” group“。这只保留一个值中的第一个重要字符 (数字或字母),如果是数字,只需将“#”存储为我们 希望所有编号的项目组合在一起。
我也知道我们也可以通过使用特定的数字来解决这个问题 然而,不过哈希字符,我虽然提高了这一点 如果有更广泛的问题。我在下面列出了一些具体细节。
字段定义:
<fieldType name="letterGrouping" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="^([a-zA-Z0-9]).*" group="1"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z0-9])" replacement="" replace="all"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="([0-9])" replacement="#" replace="all" />
</analyzer>
</fieldType>
服务器信息:
Solr Specification Version: 3.2.0
Solr Implementation Version: 3.2.0 1129474 - rmuir - 2011-05-30 23:07:15
Lucene Specification Version: 3.2.0
Lucene Implementation Version: 3.2.0 1129474 - 2011-05-30 23:08:57
答案 0 :(得分:0)
来自solr用户组邮件列表
2011年10月27日13:09,Erick Erickson写道:
查看您的管理/分析页面并将您的令牌放入 索引和查询时间。我认为你会看到的是# 由于第一个被查询时被剥离 PatternReplaceFilterFactory。
您可能希望将分析器拆分为索引时间和 查询 - 时间对并执行适当的替换以保持#在查询 时间。
实际上,问题是在查询时,查询也是通过相同的分析器运行的。当输入通过带有正则表达式的第一个PatternReplaceFilterFactory运行时:
([^a-z0-9])
它从查询中删除了哈希字符,因此完全删除了查询。
答案 1 :(得分:0)
问题是在索引和查询时都应用了fieldtype 我试图在查询类型中检查字段类型的#转换,它似乎返回空白。
但是,field_name:123会返回结果,因为123应该转换为#并且应该与索引值匹配。
或者只在索引时间内应用fieldType。