2015-04-24 10 views
8

Sto utilizzando context Suggester e mi chiedo se possiamo impostare l'ambito del contesto da utilizzare per i suggerimenti piuttosto che l'utilizzo di tutti i contesti.Contesto di Elasticsearch suggeritore, bool in contesti

Attualmente la query deve corrispondere a tutti i contesti. Possiamo aggiungere un'operazione "OR" nei contesti e/o specificare quale contesto usare per una particolare query?

Prendendo l'esempio da here: Mapping:

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

Poi ho indice di un documento:

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

Query:

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

Se io query utilizzando un solo contesto ("posizione" nell'esempio sopra) dà un errore, ho bisogno di pa ss entrambi i contesti, è possibile specificare quale contesto usare? Oppure passa qualcosa come un parametro "Context_Operation" su "OR".

+0

E 'ok per indicizzare la categoria in questo modo: [qualsiasi, ristorante] ("qualsiasi" saranno inclusi in tutti i documenti indicizzati per impostazione predefinita) e quando si esegue la query, passare "qualsiasi", come categoria + "posizione"? –

risposta

1

si hanno 2 scelte:

Prima di aggiungere tutti i valori di tipo disponibili in modo predefinito nella mappatura (non scalabile)

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

seconda opzione, è aggiungere un valore predefinito per ogni documento indicizzato, e si aggiunge solo questo valore come predefinito

Mapping:

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

documento:

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