【问题标题】:How to pre-filter data before execute ElasticSearch query?如何在执行 ElasticSearch 查询之前预先过滤数据?
【发布时间】:2020-07-14 07:22:17
【问题描述】:

我打算同时使用 MsSqlServer 和 Elastic。 MSSQL 是主数据库,Elastic 是搜索数据库。 我的 db 结构如下所示:

  • 用户(ID、姓名、companyId) - 120k 条记录
  • 公司(ID、名称)- 10k 条记录
  • Company_matrix (parent_company_id, child_company_Id) - 20k 条记录
  • Company_share_data (company_id, share_to_company_Id) - 50k 条记录
  • 产品(id、名称、allow_to_be_sharedcompanyId) - 100 万条记录

我将为产品和公司表创建弹性索引以提高搜索速度。 companyId = X 的登录用户可以看到所有 companyid = X 的产品,或 Company_matrix 中定义的母公司的所有产品,或 Company_share_data 但 allow_to_be_shared 不等于 false。

这个查询在 SQL server 中非常简单,但在像 elasticsearch 这样的 nosql db 中却很痛苦。有没有办法在sqlserver中搜索“可用产品id”列表,然后将其传递给elasticsearch并与用户的搜索条件混合?还是有更好的主意?

谢谢

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果我理解正确,您希望根据某些条件查看 Elasticsearch 中的所有文档。如果是这种情况,您可以在 Elasticsearch 中使用 BoolQuery

    如果这对您来说很痛苦,那么另一种方法是从您的 SQLQuery 中获取产品 ID 列表,然后在 Elasticsearch 中使用(传递)这些 ID 到 Terms Query

    希望这有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多