2016-03-05 54 views
1

我要创造我自己的分析,但只适用的StopFilter多字值,并仍然指数与一个字值(停用词本身)如何跳过的StopFilter一个字值

new Analyzer() { 
      protected Analyzer.TokenStreamComponents createComponents(String fieldName) { 
       final StandardTokenizer src = new StandardTokenizer(); 
       TokenStream tok = new StandardFilter(src); 
       tok = new LowerCaseFilter(tok); 
       tok = new StopFilter(tok, StandardAnalyzer.STOP_WORDS_SET); 
       return new Analyzer.TokenStreamComponents(src, tok); 
      } 
     } 
停用词

实施例,我有2个值:

1. this 
2. this table 
3. table 

通过上述分析器,查询字符串是“这”,没有结果被发现。不过,我想与查询,结果应该包含值1(这个),并且不包含值2(此表

+0

你正在使用哪个版本的lucene? –

+0

我正在使用版本5 – yelliver

回答

0

你可以试试这个:

... 
final StandardTokenizer src = new StandardTokenizer(); 
src.setReader(new StringReader("this table")); 
... 
+0

StandardTokenizer无法正常工作,请再次阅读我的问题 – yelliver

0

没有选项为此,您需要构建自己的StopFilter。

+0

雅,我知道,我想问如何建立自己的,因为在Filter工具中,我不知道如何确定完整索引文本 – yelliver

+0

您无法知道过滤器的整个输入。你必须编写一个令牌过滤器来缓冲第一个令牌,如果它是一个停止词,然后在没有更多令牌时恢复它。 – jpountz

+0

PLZ给我一些代码?我在lucene上有一个小窍门 – yelliver