2015-04-24 11 views
8

Korzystam z sugestii kontekstu i zastanawiam się, czy możemy ustawić zakres kontekstu, który ma być używany dla sugestii, zamiast korzystać ze wszystkich kontekstów.Elasticsearch kontekst sugestor, bool na kontekstach

Obecnie zapytanie musi pasować do wszystkich kontekstów. Czy możemy dodać operację "OR" do kontekstów i/lub określić, który kontekst należy zastosować dla konkretnego zapytania?

Biorąc przykład z here: mapowanie:

PUT /venues/poi/_mapping 
{ 
    "poi" : { 
    "properties" : { 
     "suggest_field": { 
     "type": "completion", 
     "context": { 
      "type": { 
      "type": "category" 
      },   
      "location": { 
      "type": "geo", 
      "precision" : "500m" 
      } 
     } 
     } 
    } 
    } 
} 

Następnie wskaźnik dokumentu:

{ 
    "suggest_field": { 
    "input": ["The Shed", "shed"], 
    "output" : "The Shed - fresh sea food", 
    "context": { 
     "location": { 
     "lat": 51.9481442, 
     "lon": -5.1817516 
     },  
     "type" : "restaurant" 
    } 
    } 
} 

Zapytanie:

{ 
    "suggest" : { 
    "text" : "s", 
    "completion" : { 
     "field" : "suggest_field", 
     "context": { 
     "location": { 
      "value": { 
      "lat": 51.938119, 
      "lon": -5.174051 
      } 
     } 
     } 
    } 
    } 
} 

Jeśli zapytania przy użyciu tylko jednego kontekstu ("location" w powyższym przykładzie) daje błąd, muszę pa ss oba konteksty, czy możliwe jest określenie, którego kontekstu użyć? Możesz też przekazać coś takiego jak parametr "Context_Operation" do "OR".

+0

Czy to jest ok do indeksu kategorię tak: [każdy, restauracja] („any” zostaną uwzględnione we wszystkich indeksowanych docs domyślnie) i podczas wykonywania kwerendy, pass „każdy”, jak kategoria + "lokalizacja"? –

Odpowiedz

1

Masz 2 możliwości:

najpierw dodać wszystkie dostępne wartości typu jak domyślnie w mapowaniu (nie skalowalne)

{ 
    "poi" : { 
    "properties" : { 
     "suggest_field": { 
     "type": "completion", 
     "context": { 
      "type": { 
      "type": "category", 
      "default": ["restaurant", "pool", "..."] 
      },   
      "location": { 
      "type": "geo", 
      "precision" : "500m" 
      } 
     } 
     } 
    } 
    } 
} 

Druga opcja, należy dodać wartość domyślną dla każdego indeksowanego dokumentu, a dodasz tylko tę wartość jako domyślną

Mapowanie:

{ 
    "poi" : { 
    "properties" : { 
     "suggest_field": { 
     "type": "completion", 
     "context": { 
      "type": { 
      "type": "category", 
      "default": "any" 
      },   
      "location": { 
      "type": "geo", 
      "precision" : "500m" 
      } 
     } 
     } 
    } 
    } 
} 

dokumentu:

{ 
    "suggest_field": { 
    "input": ["The Shed", "shed"], 
    "output" : "The Shed - fresh sea food", 
    "context": { 
     "location": { 
     "lat": 51.9481442, 
     "lon": -5.1817516 
     },  
     "type" : ["any", "restaurant"] 
    } 
    } 
} 
Powiązane problemy