如何开始使用 Apache Lucene 搜索 bean 属性?

卡尔·里希特

我正在尝试使用 JPA 的 Java EE 框架的全文搜索引擎框架,并且不想切换到提供非常简洁的 Hibernate 搜索功能的 Hibernate,所以我现在从 Apache Lucene 开始。

我想搜索 JPA 实体的字符串字段(在为它们创建索引后,即编写器/读取器示例)。我将使用包装持久层的 EJB 来使索引保持最新。我认为我使用 JPA 和 Java EE 无关紧要。

由于 Apache 项目根本没有保持其文档最新或至少将它们标记为过时的政策,因此https://wiki.apache.org/lucene-java/TheBasics和类似站点上的大多数示例都没有不能使用,因为类和方法已被删除。通过搜索引擎找到的博客文章也是如此。找到它们是可能的,但是找到的任何东西都需要尝试,因为大约有。90% 的变化是人们发现该示例指的是不再存在的类或方法......

我正在寻找显示上述用例的任何示例,其中包含最新版本的 Lucene,即 6.5.0 afaik。

萨比尔汗

我不确定 6.5 中发生了什么变化,但下面是 Lucene 6.0.0 的代码,也可以用 6.5.0 编译/运行。

索引创建

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.FSDirectory;

public class IndexCreator {

    public static IndexWriter getWriter() throws IOException{
          File indexDir = new File("D:\\Experiment");
          SimpleAnalyzer analyzer = new SimpleAnalyzer();
          IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
          indexWriterConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
          IndexWriter indexWriter = new IndexWriter(FSDirectory.open(indexDir
                .toPath()), indexWriterConfig);
          indexWriter.commit();
          return indexWriter;

    }
}

现在您可以使用此编写器使用writer.updateDocument(...) writer.addDocument(...)方法为您的文档编制索引

可以将字段添加到文档中,如下所示,

doc.add(new Field("NAME", "Tom", new FieldType(TextField.TYPE_STORED)));

搜索

import java.io.IOException;
import java.nio.file.Paths;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.FSDirectory;



public class LuceneSearcher {

    public static void searchIndex() throws IOException{

        IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get("D:\\Experiment")));

        IndexSearcher searcher = new IndexSearcher(reader);

        TopDocs hits = searcher.search(new WildcardQuery(new Term("NAME", "*")), 20);

        if (null == hits.scoreDocs || hits.scoreDocs.length <= 0) {
            System.out.println("No Hits1 Found");
            return;
        }

        System.out.println(hits.scoreDocs.length + " hits1 Docs found !!");

        for (ScoreDoc hit : hits.scoreDocs) {
            Document doc = searcher.doc(hit.doc);
        }

        reader.close();
    }
}

搜索器代码假定您有一个带有NAME字段名称的索引文档

我想,这应该足以让你开始。

需要帮助请叫我。

我有这些 Maven 依赖项,

<dependencies>

    <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>6.5.0</version>
        </dependency>
  </dependencies>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Apache Lucene进行搜索优化

来自分类Dev

Apache Lucene-优化搜索

来自分类Dev

Apache Lucene和Hibernates搜索出错

来自分类Dev

如何根据lucene搜索结果查询lucene?

来自分类Dev

使用一个静态过滤器的基于Hibernate Apache Lucene的全文本搜索

来自分类Dev

Apache Solr-Lucene-邮政编码半径搜索

来自分类Dev

如何撰写lucene.net的搜索查询?

来自分类Dev

Lucene搜索词如何工作

来自分类Dev

如何提高Lucene中的搜索查询效率?

来自分类Dev

如何分析使用Apache Lucene 4.0的领域

来自分类Dev

Lucene或使用布尔查询进行搜索

来自分类Dev

使用lucene.Net搜索问题

来自分类Dev

无法使用Scala在Lucene 6.2中搜索

来自分类Dev

开始使用 apache 骆驼天气库

来自分类Dev

使用 apache lucene 进行词形还原

来自分类Dev

如何使用Lucene查询界面在值列表中进行搜索

来自分类Dev

Lucene的Spring Bean配置

来自分类Dev

MongoDB全文搜索与Lucene?

来自分类Dev

Lucene搜索Alfresco

来自分类Dev

Lucene .NET搜索

来自分类Dev

MongoDB全文搜索与Lucene?

来自分类Dev

Lucene搜索语法

来自分类Dev

Alfresco Lucene搜索语法

来自分类Dev

Lucene搜索Alfresco

来自分类Dev

Lucene搜索结果

来自分类Dev

lucene 标题/内容搜索

来自分类Dev

Apache Lucene 和通过候选词列表在文本文档中进行模糊搜索

来自分类Dev

如何在Lucene中创建以空格分隔的名称的模糊搜索?

来自分类Dev

如何在Elasticsearch或Lucene中基于索引类型增强搜索?