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

标签 java apache search lucene

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/

相关文章:

java - Android 二维码生成器

database - Lucene 查询语法搜索

mysql - 使用sql使用一个或多个关键字搜索多个列

php - 站点地图 xml 文件; url 是否必须以 ".htm"结尾?

java - 如何在xslt文件中调用外部java函数?

java - 为什么我的 jsp 文件会收到 NullPointerException?

java - JMapViewer 将鼠标监听器添加到 MapMarkerDot

apache - 如何修改包含路径和参数的查询字符串?

linux - 如何在 Debian 上卸载 xdebug?

php - 为什么 apache2 不重定向到 https,或者按照我对 mediawiki 的期望行事?