2012-07-07 15 views
6

Próbuję użyć ElasticSearch do analizy - w szczególności do śledzenia "najwyższej zawartości" dla ręcznie zwijanego CMS Rails. Wymóg jest nieco bardziej skomplikowany niż utrzymywanie licznika dla każdej części treści. W tej chwili nie będę w stanie zagłębiać się w problem, ponieważ nie mogę sprawić, że nawet podstawy będą działać.Problemy z liczbą facetów

Mój problem polega na tym, że używam faset i liczba ta nie jest taka, jak się spodziewam. Na przykład:

Zapytanie:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":1,"all_terms":false,"order":"count"}}}} 

Wynik:

{"el_ids":{"_type":"terms","missing":0,"total":16672,"other":16657,"terms":[{"term":"quis","count":15}]}} 

Ok, super, kawałek treści o identyfikatorze "Quis" miał 15 trafień, a od order jest count, to powinien bądź moim najlepszym materiałem. Teraz dostajemy 5 najlepszych materiałów.

Zapytanie:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":5,"all_terms":false,"order":"count"}}}} 

Wynik (tylko aspekt):

[ 
    {"term":"qgz9","count":26}, 
    {"term":"quis","count":15}, 
    {"term":"hnqn","count":15}, 
    {"term":"higp","count":15}, 
    {"term":"csns","count":15} 
] 

Huh? Więc kawałek treści w/id "qgz9" miał więcej trafień z 26? Dlaczego nie był to najlepszy wynik w pierwszym zapytaniu?

Ok, pozwala uzyskać 100 najlepszych teraz.

Zapytanie:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":100,"all_terms":false,"order":"count"}}}} 

Wyniki (tylko facet):

[ 
    {"term":"qgz9","count":43}, 
    {"term":"difc","count":37}, 
    {"term":"zryp","count":31}, 
    {"term":"u65r","count":31}, 
    {"term":"sxsi","count":31}, 
    ... 
] 

Więc teraz "qgz9" ma 43 trafień zamiast 26? Jak to możliwe? Mogę was zapewnić, że nic nie dzieje się w tle, modyfikując indeks. Jeśli powtórzę te zapytania, otrzymam te same wyniki.

Powtarzam ten proces zwiększania rozmiaru wyniku, liczby się zmieniają, a nowe identyfikatory treści pojawiają się u góry. Czy ktoś może mi wyjaśnić, co robię źle lub gdzie moje zrozumienie tego, jak to działa, jest wadliwe?

Odpowiedz

7

Okazuje się, że jest to known issue:

... droga do góry aspekty N działa teraz jest coraz górny N z każdym fragmencie, i łączenie wyników. Może to dać niedokładne wyniki.

Domyślnie mój indeks był tworzony z 5 odłamkami. Zmieniając to tak, że indeks ma tylko jeden odłamek, liczenia zachowują się zgodnie z moimi oczekiwaniami. Innym obejściem byłoby ustawienie zawsze wartości size na wartość większą niż liczba oczekiwanych faset i odklejenie najlepszych wyników N.

+0

To nadal nie jest dobry sposób, aby to osiągnąć. Sharding jest bardzo ważną cechą Elasticsearch. Możesz stracić dużo wydajności, jeśli weźmiesz pod uwagę tylko 1 fragment. – eliasah

Powiązane problemy