gpt4 book ai didi

java - 如何在 Lucene 4.2.1 中实现基本的分析器?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:40:13 25 4
gpt4 key购买 nike

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();

最佳答案

您必须从 createComponents 返回一个 TokenStreamComponents。 null 是不够的。

但是,Lucene 4.2.1 当然确实StandardAnalyzer .

如果您可能正在引用 Lucene 4.x 中 StandardAnalyzer 的更改,并且正在寻找旧的 StandardAnalyzer,那么您需要 ClassicAnalyzer .

如果你真的想要一个精简的分析器,它不修改任何东西,只是以一种非常简单的方式标记化,也许 WhitespaceAnalyzer将为您服务。

如果您根本不想对其进行修改或标记化,那么 KeywordAnalyzer .

如果您必须创建自己的分析器,如您所说,则重写方法 createComponents,并实际构建并返回 TokenStreamComponents 的实例。 .如果以上四种都不能满足你的需求,我不知道你的需求是什么,所以我不会在这里尝试具体的例子,但这里是来自Analyzer docs的例子。

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);
}
};

TokenStreamComponents 也有一个 arg 构造函数,所以顺便说一句,过滤器是可选的。

关于java - 如何在 Lucene 4.2.1 中实现基本的分析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com