在对Apache Lucene v7.5进行基准测试时,我注意到了一个奇怪的行为: 我使用Lucene和SimpleAnalyzer(没有停用词,没有词干)为英语维基百科转储(5,677,776文档)建立了索引。
然后我用以下查询搜索了索引:
布尔查询 谁 的结果号都大于单个术语 the 的结果号以及单项 谁 的结果数(应小于两者)。
对此有解释吗?
代码段:
analyzer = new SimpleAnalyzer();
MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[]{"title", "content","domain","url"},analyzer);
// Parse
Query q = parser.parse(querystr);
// top-10 results
int hitsPerPage = 10;
IndexReader indexReader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(indexReader);
// Ranker
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage);
// Search
searcher.search(q, collector);
// Retrieve the top-10 documents
TopDocs topDocs=collector.topDocs();
ScoreDoc[] hits = topDocs.scoreDocs;
totalHits=topDocs.totalHits;
System.out.println("query: "+querystr + " " + hits.length+" "+String.format("%,d",totalHits));
答案 0 :(得分:1)
解释是您假设的the default operator is OR
,而不是AND
。搜索the who
将返回具有the
或who
或两者都有的文档。
the - 5,382,873
who - 1,687,254
the OR who - 5,411,305
即包含who
的大多数文档还包含the
,但当您同时检索到两者时,会将28 432个文档添加到结果集中。
您可以通过更改默认运算符来更改此行为:
parser.setDefaultOperator(QueryParserBase.AND_OPERATOR)