在我的模式中,我有一列包含逗号分隔的参与者列表。例如,克里斯·普拉特(Chris Pratt),文·迪塞尔(Vin Diesel),布拉德利·库珀(Bradley Cooper),佐伊·索尔达娜(Zoe Saldana)。另一个用逗号分隔的流派。例如动作,冒险,科幻。在这两种情况下,我只想在','上标记,而不在空白或'-'上标记。 我尝试按照另一个stackoverflow问题的建议创建新的FieldType,
<fieldType name="commaDelimited" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="[,]" />
</analyzer>
</fieldType>
它在','上被分割,但也在空格和'-'上被分割,产生了诸如Chris,Pratt,Vin,Diesel,Bradley,Cooper,Zoe,Saldana,sci,fi之类的令牌。 我希望它仅在','上分割,而不在任何其他特殊字符上分割。 我该怎么办?
答案 0 :(得分:0)
您可以使用与我详细介绍的in another recent answer相同的概念:
<fieldType name="comma-separated-list" class="solr.TextField">
<analyzer>
<tokenizer class="solr.SimplePatternTokenizerFactory" pattern="[^,]+"/>
</analyzer>
</fieldType>
SimplePatternTokenizer与PatternTokenizer相似,但仅支持完整正则表达式语法的子集。这样可以更快地完成此类任务。上面给出的模式将在,
上拆分令牌(即,捕获每个,
上的所有内容)。
要通过API添加字段,您可以使用:
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type" : {
"name":"comma-separated-list",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer" : {
"tokenizer":{
"class":"solr.SimplePatternTokenizerFactory", "pattern": "[^,]+" },
}
}
}
}' http://localhost:8983/solr/collectionname/schema
答案 1 :(得分:0)
尝试使用以下标记器:
<tokenizer class = "solr.PatternTokenizerFactory" pattern = "\ s *,:; \ s *" />