java - Lucene中找不到文档

标签 java search indexing lucene full-text-indexing

我正在通过 lucene 对文档建立索引,索引已创建,但是当实现搜索时,得到 0 个命中。

我不知道索引或搜索错误出在哪里。

索引

Directory directory = FSDirectory.open(Paths.get("C:\\indexes\\teste"));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(directory, config);

Document document = new Document();
document.add(new StringField("id", "1", Store.YES));
document.add(new StringField("name", "Pedro Henriques", Store.YES));
document.add(new StringField("displayName", "Pedro Rosa", Store.YES));
document.add(new StringField("segment", "segment xpto", Store.YES));

indexWriter.addDocument(document);
indexWriter.commit();
indexWriter.close();

directory.close();

搜索

Directory directory = FSDirectory.open(Paths.get("C:\\indexes\\teste"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("", analyzer);
Query query = parser.parse("name:Henriques");
log.info("Consulta analisada-> " + query);

TopDocs docs = searcher.search(query, 100);
for (ScoreDoc sd : docs.scoreDocs) {
    Document doc = searcher.doc(sd.doc);
    log.info(doc.toString());
}

docs.scoreDocs 为空。

我的 Lucene 依赖项是

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>8.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>8.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queries</artifactId>
            <version>8.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>8.2.0</version>
        </dependency>

我的 Java 版本是 11。

谢谢!

最佳答案

字段“name”不能是 StringField 类型,因为该类型的字段不能包含空格、特殊字符或大写字母。

在本例中使用 TextField 类型。

document.add(new TextField("name", "Pedro Henriques", Store.YES));

关于java - Lucene中找不到文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58150833/

相关文章:

java - 如何在新的STS 3.7.2中运行旧的STS 2.8.0 GWT SDK项目?

python - 正则表达式 Findall 在第一次出现时停止搜索

php - 具有多个结果错误的mysql子查询

android - 如何将数据搜索到 json ListView 中?

indexing - 有没有办法将 Couchbase 索引添加到版本控制中?

C++ 排序和跟踪索引

java.io.IOException : setDataSource failed 异常

java - Android - 获取手机指向的方向(类似 compass )

java - 在 Spring MVC 中同时处理文件和文本输入字段

python - 这段python索引代码是做什么的