Visualizar campos multi-fields

Hola, me gustaría saber si se pueden mostrar los campos creados como multifield. Me explico:
tenfo la siguiente template que me separa una url en params y uri (http://elastic.co/mola/mazo?en=español).
Esto me crea un uri.uri = "/mola/mazo" y uri.params=?en=español.
Si busco funciona bien, pero no logro visualizar los campos con _source o _fields o similar (si lo consigo si los agrego).

    {
          "uri_template": {
            "match": "uri",
            "mapping": {
              "analyzer": "text_analyzer",
              "type": "text",
              "fields": {
                "uri": {
                  "analyzer": "uri_analyzer",
                  "type": "text",
                  "fielddata": true,
                },
                "params": {
                  "analyzer": "params_analyzer",
                  "type": "text"
                }
              }
            }            
          }
        }

sabéis si se pueden mostrar?

Hola Guillermo,

Esto se debe a que los campos no son almacenados por defecto. Básicamente, el campo _source se almacena por defecto; el resto de los campos son sólo indexados - lo que quiere decir que podemos buscar en ellos, pero no podemos recuperarlos. Tienes más información sobre ese comportamiento aquí.

Por otro lado, el campo que puedes recuperar por defecto, _source, es el documento original que enviamos a Elasticsearch - que tendría un campo uri originalmente, pero no los otros dos que genera Elasticsearch con el mapping.

Si quieres recuperar estos campos individualmente, tendrías que decirle a Elasticsearch que los almacene: en la definición de cada campo puedes indicar "store": true: después, puedes recuperarlos a través de Stored fields - añadiendo al cuerpo de tu búsqueda qué campos quieres recuperar - "stored_fields" : ["uri.uri", "uri.params"].

Un saludo!

Muchísimas gracias Ismael! Me sonaba haberlo leído pero ya no me acordaba!
Un saludo!

Tengo otra preguntilla, no se si prefieres que cree otro hilo. El pasado febrero estuve en el curso de ES (operations y developer) en Madrid y creí entender que en un futuro se podrían aplicar "filter" a los campos keyword. Me explico; puedo aplicar a un campo text un filter lowercase, asciifolding; pero tiene que ser text (aunque le ponga el tokenizer a keyword). No se puede hacer lo mismo a un campo keyword?
A lo mejor me estoy liando y para ES es lo mismo un campo text con tokenizer keyword que un campo keyword.
Muchas gracias de nuevo y un saludo!

Buenas Guillermo,

correcto, se puede usar un normalizer en campos keyword: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/normalizer.html

Un saludo!
Ismael.

Eso, normalizer!! muchisimas gracias de nuevo Ismael!
Un saludo!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.