我有一个应用程序,需要做过滤,并从文章列表检索结果。对于数据库,我使用NHibernate作为MySQL。该查询还基于关键字执行全文搜索,为此,它使用Lucene.Net。
我的问题是查询跨越“两个”域。例如,我可能需要获取所有包含关键字“流量控制”的文章,并且PublishedOn < 2012-10-01。此外,查询使用分页,例如第2页,页面大小为50。问题是如何创建同时跨越MySQL (对于PublishedOn部件)和Lucene.Net的查询,以利用全文搜索功能。
如果我首先在MySQL上搜索,我不能只得到前50个,因为在Lucene中可能会进一步过滤结果,我需要50作为我的页面大小。如果我从Lucene.Net开始,也是如此。此外,最好是按“相关性”排序,所以这是Lucene可以做的事情,而不是MySQL。
我目前的方法是首先根据MySQL进行过滤,然后检索匹配记录的所有主键。然后,我在Lucene中执行一个查询,其中包含一个将主键与结果列表相匹配的术语查询。然而,Lucene对于这样的查询非常慢,数据库可以包含超过200,000篇文章。在Lucene中执行这样的查询需要很长时间,而对于全文搜索来说,它的速度非常快。
你知道该如何着手解决这样的问题吗?
发布于 2012-09-30 16:05:02
Lucene不仅仅是全文搜索。您可以向Lucene文档添加PublishedOn属性并执行查询,如下所示:
Text:"traffic control" AND PublishedOn:[00000000 TO 20121001]查看Lucene syntax documentation中的"Range Searches“部分。
https://stackoverflow.com/questions/12644864
复制相似问题