ERP 应用程序中的全文搜索 - Apache Lucene\Solr 是正确的选择吗?

Full Text Search in ERP application - is Apache Lucene\Solr the right choice?

我目前正在研究向我们的 ERP SAAS 应用程序添加快速全文搜索所需的工具,目的是在应用程序中提供一个单一的搜索入口点,该入口点可以搜索组成 ERP 的许多不同类型的对象软件的域名。

该应用程序(Spring Java Web 应用程序)由 Sql 服务器 RDBMS(使用 Hibernate 作为 ORM),有数百种不同的 tables,其中数十种(但可能更多)应该是可搜索的(通常甚至 table 中有一个或多个 varchar 列应该是 indexed/searched).

例如,我可以在一个搜索栏中搜索客户、合同、员工、文章..),此数据也经常更新(新插入、删除、更新..)

我发现这篇文章 (www.chrisumbel.com/article/lucene_solr_sql_server) 展示了如何将 Sql 服务器数据库与 Solr 连接,并在提取所用数据的数据库上发布了一个查询示例在数据导入期间通过 Solr。

因为我们有几十个(甚至更多)tables 包含可搜索数据,这意味着我们应该通过第一步,整合所有使用 Solr 提取此数据的 sql 查询,为了建索引?

第二个问题:并非所有人都可以搜索所有数据(权限和临时过滤器),因此我们如何补充 Solr 提供的全文搜索,以满足放置更复杂查询的需要(加入其他tables 例如)在此数据上?

谢谢

您几乎是在要求一个成熟的咨询项目:-)但是有一些建议是可行的。

定义搜索结果类型:搜索引擎使用非规范化数据,即您在查询时不会进行任何连接(如果您认为自己会进行连接,请坚持使用您的数据库:-)这意味着您需要在填充索引时进行必要的连接。这定义了您可以搜索的内容。大多数人 "just" 索引文档或日志行,因此只有一种类型的结果。有时会包括人员的个人资料,有时会在文档来源不同的源系统的结果之间产生差异,但最终,搜索结果的类型有限。更重要的是,它们仍然被索引到一个相同的架构中(其中架构对于搜索引擎来说具有很强的可塑性)。

Index:你知道你的 SQL 语句来提取你的数据。转换为 JSON 并将其铲入搜索引擎并不困难。需要注意的一件事:当您的数据库发生变化时,您会保持索引,增量或完整 "crawl" 取决于您要添加多少逻辑。最棘手的部分是将数据库端的删除操作添加到索引中。如果它消失了,它就消失了:你怎么知道有一些东西需要从索引中清除:-)

安全搜索 由于您并未真正加入,因此在查询时应用访问权限需要两个步骤。在索引期间,写下可能阅读您的搜索结果的人的主要(组、用户)名称。在查询时,获取用户 ID 并递归扩展它以获取用户的所有组。将其添加为查询过滤器。确保定期为所有用户缓存过滤器或什至预先计算,并将其存储在快速存储中(搜索索引是一个地方,DB 也会这样做:-) 显然,如果访问权限发生变化,您需要重新索引。好处是:只要事情只在 LDAP/AD 发生变化,你就不需要索引数据,只需要索引受影响用户的扩展组。

临时过滤器 如果要针对 X 进行过滤,请将 X 作为一个字段放入索引中。在查询时,应用过滤器。