gpt4 book ai didi

elasticsearch - Elasticsearch字词查询可排除大量用户

转载 作者:行者123 更新时间:2023-12-03 01:51:10 25 4
gpt4 key购买 nike

我正在开发类似app的游戏。为了排除用户之前刷过的个人资料,我使用“must_not”查询,如下所示:

must_not : [{"terms": { "swipedusers": ["userid1", "userid1", "userid1"…]}}]



我想知道使用这种方法的局限性是什么?当swipedusers数组包含2000个用户ID时,这种方法是否也可以使用?如果有更好的可扩展方法,我很高兴知道...

最佳答案

有更好的方法!它称为“术语查找”,就像您可以在关系数据库上执行的传统联接一样。

我可以在这里向您解释,但是,您需要的所有信息都在官方的Elastic Search页面上有详细记录:

https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-terms-query.html#query-dsl-terms-lookup

最终的解决方案是使用2个索引,一个用于注册用户,另一个用于跟踪每个用户的刷卡。
然后,对于每次滑动,您应该更新包含当前用户滑动的文档...在这里,您需要向数组添加元素,这是ElasticSearch中的另一个问题(如果您使用的是AWS托管ElasticSearch,则是一个大问题),使用脚本解决...
有关更多信息,请访问https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-updates.html#_using_scripts_to_make_partial_updates

对于您的情况,查询将导致类似:

GET /possible_matches/_search
{
"query" : {
"terms" : {
"user" : {
"index" : "swiped",
"type" : "users",
"id" : "current-user-id",
"path" : "swipedUserId"
}
}
}
}

您还应该考虑的另一件事是滑动索引的复制配置,因为每个节点都将与该索引执行“联接”,因此强烈建议在每个节点中具有该索引的完整副本。您可以通过使用值为“0-all”的“auto_expand_replicas”创建索引来实现。
PUT /swipes
{
"settings": {
"auto_expand_replicas": "0-all"
}
}

关于elasticsearch - Elasticsearch字词查询可排除大量用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com