在我使用 Lucene 索引的许多文档中,人们不小心将单词与数字连接起来。例如,可以说:“我出生于 2000 年”,而不是“我出生于 2000 年”。
是否有任何 Lucene 分词器可以将带数字的单词(例如 in2000and)分成几个单词(例如 in 2000 and)?
您可以使用WordDelimiterFilterFactory并将 splitOnNumerics=1 参数添加到您的架构中。
我没有使用 Solr。所以我从 Solr. 下载了 WordDelimiterFilter 和 WordDelimiterIterator,并将这段代码添加到我的自定义分析器中:
final Tokenizer source = new StandardTokenizer(matchVersion, reader);
TokenStream result = new StandardFilter(matchVersion, source);
int flags = WordDelimiterFilter.SPLIT_ON_NUMERICS
| WordDelimiterFilter.GENERATE_NUMBER_PARTS
| WordDelimiterFilter.GENERATE_WORD_PARTS;
result = new WordDelimiterFilter(result, flags, null);