Isa*_*aac 3 java apache lucene search
Lucene 4.2.1没有StandardAnalyzer,我不确定如何实现不改变源文本的基本分析器.有什么指针吗?
final SimpleFSDirectory DIRECTORY = new SimpleFSDirectory(new File(ELEMENTS_INDEX_DIR));
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_42, new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String s, Reader reader) {
return null;
}
});
IndexWriter indexWriter = new IndexWriter(DIRECTORY, indexWriterConfig);
List<ModelObject> elements = dao.getAll();
for (ModelObject element : elements) {
Document document = new Document();
document.add(new StringField("id", String.valueOf(element.getId()), Field.Store.YES));
document.add(new TextField("name", element.getName(), Field.Store.YES));
indexWriter.addDocument(document);
}
indexWriter.close();
Run Code Online (Sandbox Code Playgroud)
您必须从createComponents返回TokenStreamComponents. null是不够的.
然而,Lucene的4.2.1肯定不会有StandardAnalyzer.
如果你是,或许,参考Lucene 4.x中StandardAnalyzer的变化,并且正在寻找旧的StandardAnalyzer,那么你将需要ClassicAnalyzer.
如果你真的想要一个不会修改任何东西的修剪分析器,但只是以非常简单的方式标记,也许WhitespaceAnalyzer将满足你的目的.
如果你根本不想修改或标记它,那么KeywordAnalyzer.
如果你必须像你说的那样创建你自己的分析器,那么覆盖该方法createComponents,并实际构建并返回一个实例TokenStreamComponents.如果上述四个都不能满足您的需求,我不知道您的需求是什么,所以我不会在这里尝试一个具体的例子,但这里是Analyzer文档中的示例
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new FooTokenizer(reader);
TokenStream filter = new FooFilter(source);
filter = new BarFilter(filter);
return new TokenStreamComponents(source, filter);
}
};
Run Code Online (Sandbox Code Playgroud)
对于TokenStreamComponents也有一个arg ctor,顺便说一句,过滤器是可选的.