2010-10-29 72 views
1

这是我的理解是,基于查询找到文档,然后该结果然后过滤器筛选。Lucene.NET:查询或过滤?

查询是唯一会影响文档的分数/相关性的。

如果我查询与相关性相关的结果并筛选不相关的项目,是否会有任何性能(缓存)改进?

这是我的情况。我有很多产品,而且网站通常会按类别或制造商搜索产品。我在考虑使用查询,因为这会将产品缩小到可缓存的较小子集。然后我可以按产品规格过滤我的结果。我应该使用过滤器来规范吗?这样我们可以基于已经缓存的(由lucene)产品子集(类别或制造商)进行筛选。

回答

0

filterquery之间的差异主要是那个filter是确切的。如果您在brand=...上过滤,则只会获得该确切品牌。如果您查询它,您将获得品牌以及可能与您的查询相匹配的其他结果。

所以问题是,你想要一个确切的过滤器,还是只是为了相关性?

+0

BoolClause.Occur.MUST不会确切吗?你确切的意思是什么?你的意思是什么产品的相关性得分为1或0? – 2010-10-29 05:23:07

+0

@Paul Knopf:是的,在这种情况下,只有排名不同。 – Wolph 2010-10-29 13:57:22

0

过滤提供了一种机制,可进一步限制查询的结果,并在多次运行同一查询时提供可能的性能增益。 我们主要使用过滤器来实现安全性 - 这可以提高性能,因为查询的结果会被缓存。

1

使用过滤器也不会影响返回的分数,而查询中的附加词会影响返回的分数。你应该使用过滤器,例如,如果用户从作为面可用类别列表中选取某一类:

  • 类别:ELECTRICALS
  • 查询方式:单反相机

合力分数(相关性)是基于查询条件以外的其他查询条件