【发布时间】:2016-05-22 14:50:48
【问题描述】:
出于特定目的,我在 Apache Lucene 中实现了自己的分析器。在对术语进行索引之前,需要应用某些过滤器。我认为改变过滤器的应用顺序并不重要。但似乎确实如此。例如;
analyzer = new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName){
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
Tokenizer source = new NGramTokenizer(factory,3,10);
TokenStream filter = new NewlineFilter(source);
filter = new LowerCaseFilter(filter);
filter = new UsefulGrams(getVersion(), filter, usefulGramSet);
filter = new EmptySpaceFilter(filter);
return new TokenStreamComponents(source,filter);
};
};
我的分词器正在生成克,然后换行符被删除,所有的情况都被降低了。在此之后,我只希望索引中包含我认为“有用”的克数,该过滤器会消除无用的克数。最后,它过滤掉完全由空格组成的克。
使用我持有的数据集,此订单生成 316 个索引词。但是如果我改变过滤器的顺序;
analyzer = new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName){
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
Tokenizer source = new NGramTokenizer(factory,3,10);
TokenStream filter = new UsefulGrams(getVersion(), source, usefulGramSet);
filter = new NewlineFilter(filter);
filter = new EmptySpaceFilter(filter);
filter = new LowerCaseFilter(filter);
return new TokenStreamComponents(source,filter);
};
};
这会产生 350 个索引词。请注意,“第一个”过滤器必须使用 SOURCE TOKENIZER,但其他过滤器使用 FILTER TOKENSTREAM。 如果我将 SOURCE 放在每个参数中,它会给出与“addsuppression”相关的警告。
我的问题是,应用这些过滤器的顺序应该是什么?我想应用所有这些(全部小写,只是我选择的术语,没有空克,没有换行符),不会认为这会被任何改变,显然它确实如此。
【问题讨论】:
-
看来,只有在某些情况下,索引术语编号发生变化,问题似乎是由其他原因引起的......
标签: java apache lucene analyzer