2013-05-27 23 views
5

robię wyszukiwania używając aspekt zakres:Jaka jest różnica między liczbą a wartością całkowitą w zakresie aspektu elastycznego wyszukiwania?

{ 
"query": { 
    "match_all": {} 
}, 
"facets": { 
    "prices": { 
     "range": { 
      "field": "product_price", 
      "ranges": [ 
       {"from": 0, "to": 200}, 
       {"from": 200, "to": 400}, 
       {"from": 400, "to": 600}, 
       {"from": 600, "to": 800}, 
       {"from": 800} 
      ] 
     } 
    } 
} 
} 

I mam jako odpowiedź zakresy, zgodnie z oczekiwaniami:

[ 
    { 
    "from": 0.0, 
    "to": 200.0, 
    "count": 0, 
    "total_count": 0, 
    "total": 0.0, 
    "mean": 0.0 
    }, 
    { 
    "from": 200.0, 
    "to": 400.0, 
    "count": 1, 
    "min": 399.0, 
    "max": 399.0, 
    "total_count": 1, 
    "total": 399.0, 
    "mean": 399.0 
    }, 
    { 
    "from": 400.0, 
    "to": 600.0, 
    "count": 5, 
    "min": 499.0, 
    "max": 599.0, 
    "total_count": 5, 
    "total": 2886.0, 
    "mean": 577.2 
    }, 
    { 
    "from": 600.0, 
    "to": 800.0, 
    "count": 3, 
    "min": 690.0, 
    "max": 790.0, 
    "total_count": 3, 
    "total": 2179.0, 
    "mean": 726.3333333333334 
    }, 
    { 
    "from": 800.0, 
    "count": 2, 
    "min": 899.0, 
    "max": 990.0, 
    "total_count": 2, 
    "total": 1889.0, 
    "mean": 944.5 
    } 
] 

We wszystkich odpowiedziach count i total_count są takie same. Czy ktoś wie, jaka jest między nimi różnica? Którego powinienem użyć?

Odpowiedz

10

Bardzo dobre pytanie! Ta część jest trudne, ponieważ można zobaczyć te same wartości, przez większość czasu, ale ... po użyciu key_field i value_field można obliczyć w oparciu o zakresy pola i zagregowanych danych (min, max, total_count, total i mean) na innym polu. Na przykład możesz obliczyć zakresy w polu popularności i zobaczyć zagregowane dane w polu cenowym, aby zobaczyć dla każdego zakresu popularności, jaką masz cenę; może ludzie lubią tanie produkty, a może nie?

Wyobraźmy sobie, że Twoje produkty mogą mieć wiele cen, powiedzmy na przykład inną cenę dla każdego kraju ... to jest, gdy masz count, który różni się od total_count. Spójrzmy na przykład.

Indeks Miejmy kilka dokumentów, które zawierają pola popularność i pole cenę, która może mieć wiele wartości:

{ 
    "popularity": 50, 
    "price": [28,30,32] 
} 

i

{ 
    "popularity": 120, 
    "price": [50,54] 
} 

Chodźmy teraz uruchomić następujące żądanie wyszukiwania, które buduje aspekt zasięgu, używając pola popularności jako klucza i pola ceny jako wartości:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "facets": { 
     "popularity_prices": { 
      "range": { 
       "key_field": "popularity", 
       "value_field": "price", 
       "ranges": [ 
        {"to": 100}, 
        {"from": 100} 
       ] 
      } 
     } 
    } 
} 

Oto uzyskane aspekt: ​​

{ 
    "popularity_prices": { 
     "_type": "range", 
     "ranges": [ 
     { 
      "to": 100, 
      "count": 1, 
      "min": 28, 
      "max": 32, 
      "total_count": 3, 
      "total": 90, 
      "mean": 30 
     }, 
     { 
      "from": 100, 
      "count": 1, 
      "min": 50, 
      "max": 54, 
      "total_count": 2, 
      "total": 104, 
      "mean": 52 
     } 
     ] 
    } 
} 

To powinno być jaśniejsze teraz co total_count jest. Odnosi się do value_field (cena): 3 różne wartości cenowe mieszczą się w pierwszym zakresie, ale pochodzą z tego samego dokumentu. Z drugiej strony count to liczba dokumentów, które mieszczą się w zakresie.

Teraz my też rozumiał count jest o dokumentach natomiast total_count jest o wartości pól, oczekiwalibyśmy samo zachowanie w normalnym zakresie aspektu, czy pole posiada wiele wartości ... prawda? Niestety obecnie tak się nie dzieje, aspekt zasięgu uwzględnia tylko pierwszą wartość dla każdego pola. Nie wiem, czy to błąd. Dlatego count i total_count są zawsze takie same.

+0

Czy jest to gdzieś w dokumentacji? Jeśli tak, czy masz link? Dzięki – jackdbernier

+0

Właściwie nigdy nie czytałem tego nigdzie, po prostu wypróbowałem to sam :) Przeczytałem coś na temat książki "ElasticSearch" o wielu wartościach, ale i tak nie było to dla mnie całkowicie jasne. – javanna