在ICUTokenizerFactory中保留原始令牌

时间:2017-02-01 20:32:51

标签: elasticsearch solr lucene tokenize

我正在使用solr.ICUTokenizerFactory索引我的firstNamelastName字段,以便我可以根据语言特定的字边界来标记事物。

<fieldType name="text_icu" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
     <tokenizer class="solr.ICUTokenizerFactory"/>
   </analyzer>
 </fieldType>

但是我有一个用例,我想弄明白。假设我在firstName中有类似"steve-jobs"的内容。 这被标记为两个令牌。

  

史蒂夫,工作

但是,如果我进行外卡搜索

  

史蒂夫祚*

它找不到任何东西,因为没有这样的标记。

如果我也可以保留原始令牌,我的问题就会解决。 所以虽然索引以某种方式我可以生成这样的三个令牌

  

史蒂夫,作业,史蒂夫的作业

有没有办法可以保留原始令牌?

我正在使用 DSE 4.8.12

或者还有其他方法可以解决这个问题。任何指针赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

我相信你可以将WordDelimiterFilterFactory与ICUTokenizerFactory结合使用。 WordDelimiterFilterFactory有一个preserveOriginal选项:

<fieldType name="text_icu" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
     <tokenizer class="solr.ICUTokenizerFactory"/>
     <filter class="solr.WordDelimiterFilterFactory"
         preserveOriginal="1"
     />
   </analyzer>
 </fieldType>