Lucene搜索如何运作?

时间:2013-04-07 14:22:49

标签: lucene

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

0 个答案:

没有答案