我正在测试 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;