elasticsearch - 如何在执行 ElasticSearch 查询之前预先过滤数据?
问题描述
我将同时使用 MsSqlServer 和 Elastic。MSSQL 是主数据库,Elastic 是搜索数据库。我的 db 结构如下所示:
- 用户 (id, name, companyId ) - 120k 条记录
- 公司(id、name) - 10k 条记录
- Company_matrix (parent_company_id, child_company_Id) - 20k 条记录
- Company_share_data (company_id, share_to_company_Id) - 50k 条记录
- 产品(id、name、allow_to_be_shared、companyId) - 1m 条记录
我将为产品和公司表创建弹性索引以提高搜索速度。companyId = X 的登录用户可以看到 companyid = X 的所有产品,或Company_matrix中定义的母公司的所有产品,或Company_share_data中其他公司共享的所有产品,但 allow_to_be_shared 不等于 false。
这个查询在 SQL server 中非常简单,但在像 elasticsearch 这样的 nosql db 中很痛苦。有没有办法在sqlserver中搜索“可用产品id”列表,然后将其传递给elasticsearch并与用户的搜索条件混合?还是有更好的主意?
谢谢
解决方案
如果我正确理解您希望根据某些标准查看 Elasticsearch 中的所有文档。如果是这种情况,您可以在 Elasticsearch中使用BoolQuery 。
如果这对您来说很痛苦,那么另一种方法是从您的 SQLQuery 中获取产品 Id 列表,并将 Id 使用(传递)到Elasticsearch 中的术语查询中。
希望这会有所帮助。
推荐阅读
- javascript - HTML/JS/JSON- 获取用户输入并将其作为 JSON 对象添加到 JSON 有效负载
- c# - 如何在 C# 中停止和开始重新监听客户端套接字连接
- ios - 我的自定义相册收藏视图加载速度很慢
- android - 如何实现位置搜索?
- jquery - 这个 npm 包可以导入吗?
- android - 如何知道安卓设备的年龄?
- python - Matplotlib 填充权重的阶梯图
- angular-providers - angular 2+ 从提供者中获取位置
- python - 以智利/名称格式将 Csv 转换为 json
- ios11 - 应用程序在使用 Siri Kit 设置 carName 的词汇时崩溃