【问题标题】:Preserve original token in ICUTokenizerFactory在 ICUTokenizerFactory 中保留原始令牌
【发布时间】:2017-06-18 18:09:13
【问题描述】:

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

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

但是,我有一个我想弄清楚的用例。假设我的名字中有"steve-jobs" 之类的东西。 这被标记为两个标记。

史蒂夫,乔布斯

但是,如果我进行通配符搜索

史蒂夫乔*

它不会找到任何东西,因为没有这样的令牌。

如果我也可以保留原始令牌,我的问题将得到解决。 所以在以某种方式建立索引时,我可以生成三个这样的令牌

史蒂夫,乔布斯,史蒂夫乔布斯

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

我正在使用 DSE 4.8.12

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

【问题讨论】:

    标签: elasticsearch solr lucene tokenize


    【解决方案1】:

    我相信您可以将 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>
    

    【讨论】:

    • 那行不通。我想在它甚至去 WordDelimiterFilterFactory 之前。 ICUTokenizerFactory 已经将令牌一分为二。并且 WordDelimiterFilterFactory 将对 ICUTokenizerFactory 提供的那些令牌进行操作,并且在 WordDelimiterFilterFactory
    • 是的,我认为您必须添加一个规则文件才能使 ICU 更像 WhitespeaceTokenizerFactory:&lt;tokenizer class="solr.ICUTokenizerFactory" rulefiles="Latn:Latin-break-only-on-whitespace.rbbi"/&gt; 这个规则文件可以在 solr 源代码中找到 - 在 solr 5.0.0 中它位于 lucene /analysis/icu/src/test/org/apache/lucene/analysis/icu/segmentation目录
    • 我正在使用 Datastax(dse 4.8.12) 。你知道如何在dse中添加规则文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多