2012-03-13 24 views
5

A tienen una cadena, digamos "Ab Cd"Cómo buscar en múltiples campos con O declaración en Elasticsearch

tengo documentos con campos: [ 'a', 'b', 'c', " d ', ...' z '] (no todos los documentos tienen todos los campos)

Quiero buscar solo en los campos' a ',' c ',' f ',' x 'pero quiero devolver todos los campos en el documento.

El acierto se produce si CUALQUIERA de los campos 'a', 'c', 'f', 'x' contiene cadena que comienza por 'Ab' o 'Cd'.

Ahora uso esto pero busca en TODOS los campos no en los seleccionados.

{'query': {'query_string': {'query': "Ab* Cd*"}}} 

Respuesta

14

Es posible lista de campos que desea realizar la búsqueda por defecto como parte de la consulta especificar:

{ 
    "query": { 
     "query_string" : { 
      "fields" : ["a", "c", "f", "x"], 
      "query" : "Ab* Cd*" 
     } 
    } 
} 

Alternativamente, se puede prefijar cada término con el nombre del campo:

{'query': {'query_string': {'query': "a:Ab* c:Ab* f:Ab* x:Ab* a:Cd* c:Cd* f:Cd* x:Cd*"}}} 

Verificar Query String Query página de elasticsearch Guía que describe estas y otras opciones útiles.

+0

Gracias, esto resuelve el problema. –

4

Esto es exactamente lo que estaba buscando. En caso de que cualquiera que busque una versión Java de esto:

QueryStringQueryBuilder qsqb = new QueryStringQueryBuilder("Ab* Cd*") 
      .field("a", 2) 
      .field("b") 
      .field("c") 
      .field("f") 
      .field("x"); 

puede incluso utilizar el terreno impulsar si quieres como muestra para el campo "a" en código de seguridad.

Cuestiones relacionadas