Pdfbox Lucene-高效文本搜索

Pdfbox Lucene-高效文本搜索,pdfbox,lucene,Pdfbox,Lucene,我有一个由pdfbox api类生成的索引LucenePDFDocument。由于索引只包含文本内容,我希望有效地搜索此索引 我将用搜索字符串搜索“contents”字段,结果顺序必须从最相关到不太相关。下面给出的代码确实显示了包含搜索文本单词的文件,例如“What is your national”,但结果不包含包含完整句子的文件 在上述场景中,我应该使用什么查询解析器和查询进行搜索 Query query = new MultiFieldQueryParser(Version.L

我有一个由pdfbox api类生成的索引
LucenePDFDocument
。由于索引只包含文本内容,我希望有效地搜索此索引

我将用搜索字符串搜索“contents”字段,结果顺序必须从最相关到不太相关。下面给出的代码确实显示了包含搜索文本单词的文件,例如“What is your national”,但结果不包含包含完整句子的文件

在上述场景中,我应该使用什么查询解析器和查询进行搜索

      Query query = new MultiFieldQueryParser(Version.LUCENE_30, fields,
                new StandardAnalyzer(Version.LUCENE_30))
                .parse(searchString);

      TopScoreDocCollector collector = TopScoreDocCollector.create(5,
                false);
        searcher.search(query, collector);
        ScoreDoc[] hits = collector.topDocs().scoreDocs;
        System.out.println("count " + hits.length);
        for (ScoreDoc scoreDoc : hits) {
            int docId = scoreDoc.doc;
            Document d = searcher.doc(docId);
            System.out.println(d.getField("path"));
        }

这不是关于编程部分,而是关于。要搜索整个短语,只需将其用双引号括起来,即,不要搜索

What is your nationality
搜寻

"What is your nationality"
Lucene在不加引号的情况下查找每个单独单词的所有文档,即“what”、“is”、“your”和“National”(“is”和“your”可以省略为),并根据文档中出现的总次数(而不仅仅是该短语)对其进行排序。由于在
TopScoreDocCollector
中将要查找的文档数设置为5,因此结果中可能不会出现带有短语的文件。添加引号会使Lucene忽略没有确切短语的所有其他文档


此外,如果您只在“内容”字段中搜索,则不需要
MultiFieldQueryParser
,可以使用simple来代替。

“下面给出的代码没有按预期工作”-您能否描述您期望的内容和实际得到的内容?代码显示了包含搜索文本单词的文件,例如“您的国籍是什么”。但结果不包含包含此全文的文件,例如:somdir/a.pdf包含此全文字符串,但未显示在结果中。如何在lucene中有效地实现全文搜索。