我有一个像这样的词lovelive,它由两个简单的词组合而成love,live没有空格。
lovelive
love
live
我想知道哪种Lucene Analyzer可以将这种单词标记为两个单独的单词?
有一个看DictionaryCompoundWordTokenFilter作为在Solr的说明
DictionaryCompoundWordTokenFilter
该过滤器使用组成词的词典将复合词拆分或分解为单个词。每个输入令牌均不变地传递。如果还可以将其分解为子字,则每个子字也将在同一逻辑位置添加到流中。 在:“ Donaudampfschiff dummkopf”中 要过滤的令牌生成器:“ Donaudampfschiff”(1),“ dummkopf”(2), 输出:“ Donaudampfschiff”(1),“ Donau”(1),“ dampf”(1),“ schiff”(1),“ dummkopf”(2),“ dumm”(2),“ kopf”(2)
该过滤器使用组成词的词典将复合词拆分或分解为单个词。每个输入令牌均不变地传递。如果还可以将其分解为子字,则每个子字也将在同一逻辑位置添加到流中。
在:“ Donaudampfschiff dummkopf”中
要过滤的令牌生成器:“ Donaudampfschiff”(1),“ dummkopf”(2),
输出:“ Donaudampfschiff”(1),“ Donau”(1),“ dampf”(1),“ schiff”(1),“ dummkopf”(2),“ dumm”(2),“ kopf”(2)
如您在示例配置中看到的,您将需要使用您想要拆分的语言的字典,在示例中,他们使用germanwords.txt,其中包含要分解的单词(如果找到的话)。在您的情况下,这将是love和live。
germanwords.txt
<analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="germanwords.txt"/> </analyzer>
对于Lucene来说org.apache.lucene.analysis.compound.DictionaryCompoundWordTokenFilter。该代码可在github上找到。
org.apache.lucene.analysis.compound.DictionaryCompoundWordTokenFilter