我正在测试Lucene索引/搜索,我有一个疑问。为了测试我创建一些简单的文件。 例如:
mark_test_mark.txt
标记测试标记
A.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;