1

私の問題は次のとおりです。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」を実行するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

あなたはおそらくこれをチェックしましたがapps_event_project_id、正しい結果はapps_events.typeですか? 表面上は同じようには見えませんが、それは確かにわかります。また、users_idES に直接マップし_idますか? インデックスに重複があり、そのカウントが膨らんでいる可能性があります。

于 2013-02-18T16:17:19.677 に答える
0

「ネストされたリソース」のこれまでで最高のリソース: http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-documents/

于 2013-02-18T17:24:25.853 に答える