gpt4 book ai didi

elasticsearch - 使用AND对嵌套资源进行过滤

转载 作者:行者123 更新时间:2023-12-03 00:30:08 25 4
gpt4 key购买 nike

我的问题是:Elasticsearch计数与我的数据库不同。

我索引了“用户”表,每个用户可以有一个或多个apps_events:

curl localhost:9200/users/_count
{"count":190291,"_shards":{"total":5,"successful":5,"failed":0}}

SELECT COUNT(*) FROM users
count : 190291

=>计数相同,一切都很好!

但是,当我在2个过滤器上进行搜索时,一个词和一个词之一会嵌套资源:
curl -X GET 'http://localhost:9200/users/user/_search?load=&size=10&pretty' -d '
{
"query": {
"match_all": {
}
},
"filter": {
"and": [
{
"terms": {
"apps_events.type": [
"sale"
]
}
},
{
"term": {
"apps_events.status": "active"
}
}
]
},
"size": 10
}

total : 63756

在我的数据库中:
SELECT
COUNT(DISTINCT(users_id))
FROM
apps_event
WHERE
apps_event_state_id = 1 AND apps_event_project_id = 2;

count : 63340

因为实际上,elasticsearch SQL等效查询是:
SELECT
COUNT(DISTINCT(users_id))
FROM apps_event
WHERE apps_event_state_id = 1
AND users_id IN
(SELECT DISTINCT(users_id) FROM apps_event WHERE apps_event_project_id = 2)

count : 63756

===>如何为每个资源做一个简单的“AND”?

谢谢

最佳答案

您可能已经检查过了,但是apps_event_project_idapps_events.type的正确推论吗?从表面上看,它们看起来并不相同,但是您肯定会知道这一点。另外,users_id是否直接映射到ES _id?可能是您的索引中有重复项,从而增加了其计数。

关于elasticsearch - 使用AND对嵌套资源进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939146/

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