私の問題は次のとおりです。Elasticsearch の数がデータベースと同じではありません。
「users」テーブルにインデックスを付けました。各ユーザーは、1 つまたは複数の apps_events を持つことができます。
curl localhost:9200/users/_count
{"count":190291,"_shards":{"total":5,"successful":5,"failed":0}}
SELECT COUNT(*) FROM users
count : 190291
=>同じ数、すべて問題ありません!
しかし、2 つのフィルターで検索を行うと、1 つの用語と 1 つの用語がネストされたリソースになります。
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」を実行するにはどうすればよいですか?
ありがとう