在Solr 7.x中,如何仅在逗号上标记而不在空白或其他特殊字符上标记?

时间:2018-07-24 06:01:34

标签: solr

在我的模式中,我有一列包含逗号分隔的参与者列表。例如,克里斯·普拉特(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之类的令牌。 我希望它仅在','上分割,而不在任何其他特殊字符上分割。 我该怎么办?

2 个答案:

答案 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 *" />