c# - 混合 Lucene/MySQL 查询或概念

标签 c# .net mysql lucene.net

我们的项目需要近乎实时的搜索和不断更新。数据当前存储在 MySQL 数据库中,Lucene 索引会随着数据库的修改而更新。

我们目前拥有所需的搜索功能。但是,我们正在尝试添加在索引/数据库中“标记”文档的功能。由于数据 jar 可能有数百万条记录,我们不想更新用于标记的 Lucene 索引(或者如果有一种方法可以批量更新 Lucene 也可能有效)。相反,我们在 MySQL 中有一个文档 ID 表,我们希望使用它来确定标记集。

到目前为止,我发现的最佳选择是将两个 ID 列表检索为一个整数数组,对它们进行排序(因此我只需要循环一次),然后循环查找两者之间的匹配项(尽管这并不理想,因为我们可能会丢失排序)。

尝试在 MySQL 的“IN”查询中使用 Lucene ID 列表失败,因为文档数量可能达到数百万,而 MySQL 会阻塞它。

对我们如何优化或做到这一点有任何见解吗?

另一个建议是第二个索引并使用 MutliSearcher,但我不完全确定如何去做,因为在更新或删除标签集时仍然需要用可能的百万行更新索引。

最佳答案

对于您的“批量更新”,您不能根据时间戳或 MySql 表中的类似内容对 Lucene 索引执行增量更新吗?我是在 solr 中完成的,而不是直接在 Lucene 中完成的,但由于 Solr 是 Lucene 功能的包装器,这在本质上是相同的(或者我假设...)。

Solr Delta import command .

Relevant question, (perhaps).

关于c# - 混合 Lucene/MySQL 查询或概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240213/

相关文章:

c# - WebRequest 的 GetResponseAsync 不稳定,而 GetResponse 则不是

php - 如何构建动态 SQL 查询?

c# - ASP.Net Dropdownlist ListItem (Enabled=false) 未显示在页面中

c# - 如何将新创建的用户登录到站点

c# - 我想要一种基于 Entity Framework 中的 where 子句更新一系列记录的方法,而不使用 ToList() 和 foreach

c# - Unity WWW web 请求未执行

c# - Directory.EnumerateFiles 搜索模式不适用于文件共享

.net - 简单的 CefSharp 应用程序在运行时缺少文件

php - 使用查询绑定(bind) Fuelphp

mysql - 从 nextgen 中的多个画廊 ID 获取结果