使用SOLR WordDelimiterFilterFactory查询包含连字符的数字不起作用?

时间:2012-09-21 09:15:49

标签: search solr

我正在尝试使用WordDelimiterFilterFactory配置solr 4.0-BETA,以便查询包含连字符的数字。

字段值:“123456-1234”,添加到ssn

查询:

“123456-1234”< - 作品(连字符)
“1234561234”< - 不起作用(没有连字符)

根据文档(AFAIUI),它应该匹配,因为字段类型具有generateNumberPartscatenateNumbers

来自文档:

  

generateNumberParts =“1”会导致生成数字子字:   “500-42”=> “500”“42”   catenateNumbers =“1”导致最大运行次数   要连接的数字部分:“500-42”=> “50042”

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory

我的领域:

<fields>
     <field name="ssn" type="text_en_splitting" indexed="true" stored="false" multiValued="false" />
     <field name="ssn_exact" type="string" indexed="true" stored="true" multiValued="false" />
</fields>

<copyField source="ssn" dest="ssn_exact" />
<copyField source="ssn" dest="text" /> 

text_en_splitting中的过滤器:

 <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我在本地架构中创建了一个类似的字段,并使用Solr Admin下的分析工具。 (http://localhost:8983/solr/#/collection1/analysis - 请注意,此网址假设solr在http://localhost:8983/上运行,并且您的索引名为collection1 - 根据需要进行修改。

我尝试将您的值运行到索引,并在Analyze FieldName / FieldType下拉列表中选择text_en_splitting查询。您将从结果中看到,值1234561234永远不会添加为此字段类型的索引术语。

但是,如果您使用text_en_splitting_tight FieldType,则会删除您想要的行为,因为删除了hypen并且1234561234是添加到索引中的术语。所以我会按如下方式切换字段类型并重新编制索引,你应该设置为go。

<fields>
 <field name="ssn" type="text_en_splitting_tight" indexed="true" stored="false" multiValued="false" />
 <field name="ssn_exact" type="string" indexed="true" stored="true" multiValued="false" />
</fields>

<copyField source="ssn" dest="ssn_exact" />
<copyField source="ssn" dest="text" />