Lucene搜索是如何工作的?

Lucene搜索是如何工作的?,lucene,Lucene,我正在测试Lucene索引/搜索,我有一个疑问。为了测试,我创建了一些简单的文件。 例如: mark\u test\u mark.txt 标记测试标记 a.txt 标记 测试 做记号 做记号 测试 做记号 做记号 测试 做记号 做记号 测试 标记 我提取了文件的内容,并将其索引。 我正在创建文档,以便按以下方式编制索引: doc.add(new Field(FILE_NAME, index.getFileName().trim(), Field.Store.YES, Field.Index.A

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

mark\u test\u 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;

你可以通过解释为什么你认为分数应该不同来让这个问题更有建设性?在我看来,
标记的数量
与总文本的比率在两个示例中都是相同的,因此它具有相同的权重似乎是正常的。在第1sh文件中有4个“标记”:标题中有2个,内容中有2个。在2sh中,有8个“标记”:所有这些在内容中的比率不相同分数使用相反的文档频率(在整个文档集合中),这就是为什么它是相同的。确定。我明白了。有没有办法返回按匹配数排序的文档?也许会有帮助。