2012-08-31 19 views
6

chcę uruchomić elastyczną zapytanie których dane grupy przez połączenie dwóch różnych polach (szerokość i długość)elastyczna wyszukiwarka podwójny aspekt

curl -XGET http://www.my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{ 
    "query": { 
     "query_string" : { 
      "fields" : ["genus_interpreted","dataset"], 
      "query": "Pica 2", 
      "default_operator" : "AND" 
     } 
    }, 
    "facets": { 
     "test": { 
      "terms": { 
       "fields" :["decimalLatitude","decimalLongitude"], 
       "size" : 500000000 
      } 
     } 
    } 
}' 

daje podwójną ilość wyników niż oczekiwano ... każdy wyszukiwarki pomysł?

Im więcej części relevants z odpowiedzią są ...

_shards":{ 
    "total":5, 
    "successful":5, 
    "failed":0 
}, 
"hits":{ 
    "total":**37**, 
    "max_score":3.9314494, 
    "hits":[{ 

suma odsłon, 37 jest wynikiem kwerendy, jeśli nie zastosuje aspektów. Suma ta jest połowa sumy w aspektach (patrz niżej)

"facets":{ 
    "test":{ 
     "_type":"terms", 
     "missing":0, 
     "total":**74**, 
     "other":0, 
     "terms":[ 
      {"term":"167.21665954589844","count":5}, 
      {"term":"167.25","count":4}, 
      {"term":"167.14999389648438","count":4}, 
      {"term":"167.1041717529297","count":4}, 
      {"term":"-21.04166603088379","count":4},..... 

Tak, grupowanie aspekt odbywa separetely (o szerokości i długości geograficznej następnie).

Uwaga: nie mogę grupować tylko według szerokości i długości geograficznej, ponieważ wiele rekordów może współdzielić szerokość geograficzną (ale mieć inną długość geograficzną) lub odwrotnie.

+0

można pokazać wyjście dostać? – CharlesB

+0

Nie mogę zaakceptować odpowiedzi, których nie uważam za tak naprawdę rozwiązujących pytanie ... – user1249791

Odpowiedz

4

Robisz TermsFacet na wielu polach: szerokości i długości geograficznej. Oznacza to, że szerokość i długość geograficzna są agregowane razem, ponieważ są unikatowym polem. Zobaczysz wpis dla każdej pojedynczej wartości, która może być albo szerokością geograficzną, albo długością geograficzną. Fakt, że otrzymujesz 74 wpisy z powrotem dowodzi, że masz 74 różne wartości szerokości i długości geograficznej w indeksie, co ma sens. Co chcesz osiągnąć dokładnie? Jeden wpis aspektu dla każdej długości geograficznej? W takim przypadku masz dwie opcje:

  • dodać dodatkowe pole do indeksu, który zawiera samą parę, a potem facet na nią
  • Tworzenie latitue parę długości geograficznej na bieżąco za pomocą skryptu termin. Spójrz na documentation, aby dowiedzieć się więcej. Oto przykład, który powinien pomóc, spróbować:
{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "tags" : { 
      "terms" : { 
       "field" : "latitude", 
       "script" : "term + \"_\" + _source.longitude" 
      } 
     } 
    } 
} 
+0

Chcę dokładnie zgrupować wszystkie dane, które mają dokładnie to samo miejsce (ta sama szerokość i długość geograficzna). Dodanie nowego pola jest trochę skomplikowane, dlatego chciałbym połączyć w locie szerokość i długość geograficzną, wykorzystując to do grupowania. facet jak ... "Terminy": { "Fields": [ "decimalLatitude", "decimalLongitude"], "skrypt": "termin [1]", "wielkość": 500 prace, nawiązujące termin [1] do dziesiętnej długości, ale wcale nie jest tym, czego potrzebuję. W rzeczywistości, nawet jeśli mogę dołączyć termin [0], termin [1], to nie może być porównane do niczego na indeksie, więc nie mogę dowiedzieć się, jak to w ogóle uzyskać ... – user1249791

+0

Spójrz na moją zaktualizowaną odpowiedź. – javanna

+0

dokładnie to, czego potrzebowałem, dzięki! – user1249791