gpt4 book ai didi

c# - 将查询部分与 Lucene 和数据库 (MySQL) 中的部分相结合

转载 作者:可可西里 更新时间:2023-11-01 07:45:24 27 4
gpt4 key购买 nike

我有一个应用程序需要进行过滤并从文章列表中检索结果。对于数据库,我使用 MySQL,使用 NHibernate 作为 ORM。该查询还基于关键字进行全文搜索,为此它使用了 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 中执行这样的查询需要很长时间,而全文搜索速度非常快。

有什么想法可以着手解决这样的问题吗?

最佳答案

Lucene 不仅仅是全文搜索。您可以将 PublishedOn 属性添加到 Lucene 文档并执行如下查询:

Text:"traffic control" AND PublishedOn:[00000000 TO 20121001]

查看 Lucene syntax documentation 中的“范围搜索”部分.

关于c# - 将查询部分与 Lucene 和数据库 (MySQL) 中的部分相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644864/

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