1

我正在测试 Lucene 索引/搜索,但我有疑问。为了测试我创建了一些简单的文件。例子:

mark_test_mark.txt

标记测试标记

一个.txt

标记测试标记标记测试标记标记测试标记标记测试标记


我提取文件的内容,我也在索引它。我正在以这种方式创建要索引的文档:

doc.add(new Field(FILE_NAME, index.getFileName().trim(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
doc.add(new Field(FILE_NAME_LOWER, index.getFileName().toLowerCase().trim(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
doc.add(new Field(CONTENT, index.getFileContent(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));

我的问题是当我对“mark”之类的关键字进行搜索时。Lucene 向我返回以下结果:

mark_test_mark.txt  -> 0.36452034 

a.txt   -> 0.36452034

其中,第一部分表示文件名,第二部分表示搜索分数。

在我看来,这两个文件的分数不同,第一个文件应该是a.txt。

我错了吗?

编辑:我忘了说我是按名称和内容搜索的,所以我进行了多字段搜索。我正在使用此代码来执行此操作:

IndexReader reader = IndexReader.open(Indexer.getFSDirectory(searchDirectory));

IndexSearcher searcher = new IndexSearcher(reader);

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);

MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_36, new String[] {Indexer.FILE_NAME_LOWER, Indexer.CONTENT}, analyzer);

TopDocs topDocs = null;

try {
    topDocs = searcher.search(queryParser.parse(searchQuery.getQuery()), getHitsPerPage());

} catch (ParseException e) {
    e.printStackTrace();

}

ScoreDoc[] hits = topDocs.scoreDocs;
4

0 回答 0