我正在使用lucene进行搜索并使用标签我使用空白分析器。看起来它存储得当。使用标准分析器,我的'C#'搜索将产生C,C ++的结果。我试过的每个分析器(我都没有尝试过)除了空白分析器之外做了这个。这很好,除非我搜索c#i没有结果(我使用小写C而不是大写)。如果我搜索诸如“Lucene不敏感的空白分析仪”之类的标题,这很烦人。当它碰巧是“Lucene Insensitive Whitespace analyzer?”时。 (注意前三个单词以upper开头,而最后一个单词与我的搜索相比,一个上面和下面都是。)
如何制作不敏感的空白分析仪?注意:WhitespaceAnalyzer是密封的。
答案 0 :(得分:6)
尝试将LowerCaseFilter与WhitespaceTokenizer结合使用:
http://lucene.apache.org/java/3_0_0/api/core/org/apache/lucene/analysis/LowerCaseFilter.html
http://lucene.apache.org/java/3_0_0/api/core/org/apache/lucene/analysis/WhitespaceTokenizer.html
答案 1 :(得分:3)
您可以创建如下的自定义分析器(以Lucene版本4.10.4为例)
import java.io.Reader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;
public class CaseInsensitiveWhitespaceAnalyzer extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
Tokenizer tokenizer = new WhitespaceTokenizer(arg1);
TokenStream filter = new LowerCaseFilter(tokenizer);
return new TokenStreamComponents(tokenizer, filter);
}
}
您可以在编制索引时使用分析器配置索引编写器,并在搜索时使用它来创建查询解析器。
答案 2 :(得分:1)
class CaseInsensitiveWhitespaceAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
var tokenizer = new WhitespaceTokenizer(reader);
var lowercaseFilter = new LowerCaseFilter(tokenizer);
return new StopFilter(true, lowercaseFilter, StopAnalyzer.ENGLISH_STOP_WORDS_SET, true);
}
}
这是一个C#版本,非常适合我的用例。