我正在开发一个类似于Tinder的应用程序 . 在ElasticSearch中,我有大约五十万用户及其位置的集合 . 每当用户打开应用程序以搜索附近的用户时,我都会对该集合运行弹性搜索查询 . 查询相当复杂,它不仅考虑了位置,还考虑了用户的活跃程度或他拥有的照片数量 .
我所挣扎的是如何排除当前用户已经从查询中刷过的那些用户 . 实现这一点的一种天真的方法可能是维护嵌套的用户ID数组,作为索引中每个用户文档的一部分,并根据它进行排除 . 但是,由于每个用户都进行了数十万次刷卡,因此阵列可能会变得非常大,因此它不是一个可扩展的解决方案 .
有没有办法从Elastic Search查询中根据不会影响性能的ID排除大量实体?
2 回答
使用条款查询的查找功能:Terms lookup mechanism
您可以尝试将ids filter添加到复杂查询的
bool/must_not
子句中,并查看其行为方式 .