gpt4 book ai didi

Lucene:完全禁用加权,评分,排名,

转载 作者:行者123 更新时间:2023-12-01 10:49:02 28 4
gpt4 key购买 nike

我正在使用 Lucene 来构建标记共现的大型索引(例如 [elephant,animal][melon,fruit][宝马,汽车],...)。我使用 BooleanQuery 查询索引以获取绝对计数,这两个标记在我的索引中同时出现的频率如下:

// search for documents which contain word+category
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term("word", word)), Occur.MUST);
query.add(new TermQuery(new Term("category", category)), Occur.MUST);
// only care about the total number of hits
TotalHitCountCollector collector = new TotalHitCountCollector();
searcher.search(query, collector);
int count = collector.getTotalHits();

这些查询运行非常频繁,我目前对性能不满意。我发现,BooleanQuery#createWeight 方法需要花费大量时间。现在,我不需要对结果进行任何评分或排名,因为我只对绝对文档计数感兴趣。

是否有一种方便的方法(例如预先存在的类)来完全禁用评分和权重?如果没有,是否有任何提示我需要为我的用例扩展哪些类?

最佳答案

我不太确定它是否会绕过评分以获得您正在寻找的性能提升,但应用常量评分的一种简单方法是将查询包装在 ConstantScoreQuery 中。 ,比如:

BooleanQuery bq = new BooleanQuery();
//etc.
ConstantScoreQuery query = new ConstantScoreQuery(bq);
searcher.search(query, collector);

不过,我强烈建议使用过滤器。过滤器不仅会绕过分数,还会缓存它们的结果,因此您的“类别”字段尤其看起来是一个非常好的地方。第一次使用过滤器在类别中查询时,由于需要为该过滤器构建缓存,因此需要更长的时间,但之后,您应该会看到速度有非常显着的提高。看看 FieldCacheTermsFilter .

喜欢:

Query query = new TermQuery(new Term("word", word));
Filter filter = new FieldCacheTermsFilter("category", category);
TotalHitCountCollector collector = new TotalHitCountCollector();
searcher.search(query, filter, collector);
int count = collector.getTotalHits();

关于Lucene:完全禁用加权,评分,排名,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22744858/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com