[英]Java Lucene Filters seem not to alter the query search space as expected (by me)
新发现后,此问题已经过编辑
我正在使用DefaultSimilarity
(TFIDF)搜索带有4个文档的样本索引。 使用过滤查询时,我注意到虽然可以正确减少结果数量,但不会改变文档分数。 这让我非常怀疑。
因此,我扩展了DefaultSimilarity
以打印出term_frequency
, total_number_of_documents
和document_frequency
的tf*id
f值,并确实确认了这些值完全不变。 我期望numDocs
和docFreq
能够反映出过滤器引入的较小的搜索空间。 (如果有时间,请在这里阅读)
这是我的文档集合(文本是TextField):
id=0 type=type.colors title=This is a black dog
id=1 type=type.pets title=This is a black cat
id=2 type=type.colors title=The cat is white
id=3 type=type.pets title=The cat is black
当我搜索“黑色”时:
Query query = parser.parse("black");
TopDocs results = searcher.search(query, 5);
我得到numDocs=4
和docFreq=3
。
然后,我尝试通过以下方式减少搜索空间:
1)
PrefixFilter prefixFilter = new PrefixFilter(new Term("type", "type.colors"));
TopDocs results = searcher.search(query, prefixFilter, 5);
2)
PrefixQuery categoryQuery = new PrefixQuery(new Term("type", "type.colors"));
QueryWrapperFilter categoryFilter = new QueryWrapperFilter(categoryQuery);
TopDocs results = searcher.search(query, categoryFilter, 5);
3)
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(new PrefixQuery(new Term("type", "type.colors")), Occur.MUST);
booleanQuery.add(blackQuery, Occur.MUST);
而且我总是以numDocs和docFreq相同的值结束。 ( instead of numDocs=2 and docFreq=1
因为搜索空间应该减少到2个文档,并且其中只有1个包含“黑色”);
似乎这些值是在创建索引时预先计算的,或者是在查询返回后应用了过滤器。 我对这两种选择都不满意...
应用过滤器后,Lucene如何计算这些值?
全要点在这里
分数在不同查询之间并没有真正的可比性。 在两个不同的查询之间获得相同分数的事实并不是一个有意义的结果。 您将以正确的顺序获得正确的结果。 它们恰好相等的事实仅涉及实现细节。 分数仅在作为同一查询的一部分返回的文档之间具有可比性。
您可以调用IndexSearcer.explain ,以更好地了解事物获得分数的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.