Para mi proyecto de analizar los registros de acceso, necesito hacer que el trabajo del tokenizador de jerarquía de ruta. La cosa es que el propio analizador parece estar funcionando bien, simplemente no con mis datos indexados. Tengo la sensación de que algo con el mapeo podría estar equivocado.

Nota: La versión de ElasticsEarch con la que estoy trabajando es 5.6. La actualización no es una opción. He cometido el error de usar alguna sintaxis que aún no estaba disponible en V.5.6, así que existe la posibilidad de que haya algo malo con la sintaxis. Aunque no he podido detectar mi error.

Esto es parte de mi plantilla personalizada:

{
"template": "beam-*"
"order" : 20,
"settings": {
    "number_of_shards": 1,
    "analysis": {
      "analyzer": {
        "custom_path_tree": {
          "tokenizer": "custom_hierarchy"
        },
        "custom_path_tree_reversed": {
          "tokenizer": "custom_hierarchy_reversed"
        }
      },
      "tokenizer": {
        "custom_hierarchy": {
          "type": "path_hierarchy",
          "delimiter": "/"
        },
        "custom_hierarchy_reversed": {
          "type": "path_hierarchy",
          "delimiter": "/",
          "reverse": "true"
        }
      }
    }
  },

Y este es el mapeo. El campo de objeto contiene rutas. Quiero poder buscar objetos.tree y objeto.tree_ree_reversed para identificar las categorías más visitadas en una tienda en línea.

 "mappings": {
    "logs": {
    "properties": {
      "object": {
        "type": "text",
        "fields": {
          "tree": {
            "type": "text",
            "analyzer": "custom_path_tree"
          },
          "tree_reversed": {
            "type": "text",
            "analyzer": "custom_path_tree_reversed"
          }
        }
      },

Cuando intento esto

POST beam-2019.07.02/_analyze
{
  "analyzer": "custom_path_tree",
  "text": "/belletristik/science-fiction/postapokalypse"
}

Entiendo esto

{
  "tokens": [
    {
      "token": "/belletristik",
      "start_offset": 0,
      "end_offset": 13,
      "type": "word",
      "position": 0
    },
    {
      "token": "/belletristik/science-fiction",
      "start_offset": 0,
      "end_offset": 29,
      "type": "word",
      "position": 0
    },
    {
      "token": "/belletristik/science-fiction/postapokalypse",
      "start_offset": 0,
      "end_offset": 44,
      "type": "word",
      "position": 0
    }
  ]
}

El propio analizador parece estar funcionando perfectamente bien y está haciendo lo que se supone que debe hacer.

Sin embargo, cuando intento construir una consulta.

GET beam-2019.07.03/_search
{
  "query": {
    "term": {
      "object.tree": "/belletristik/"
    }
  }
}

No tengo resultados, aunque debería haber unos pocos cientos.

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

Tal vez mi consulta esté mal. ¿O algo con el mapeo no se suma?

1
mpes 14 jul. 2019 a las 01:34

1 respuesta

La mejor respuesta

La consulta del término no aplicará el analizador en el tiempo de consulta en la cadena de entrada y, por lo tanto, intenta coincidir /belletristik/. Si nota la salida del analizador, el token generado por él es /belletristik. No hay slash / al final del token generado. Por lo tanto, el término de entrada no coincide con ninguno de los documentos.

Modifique la consulta de la siguiente manera:

GET beam-2019.07.03/_search
{
  "query": {
    "term": {
      "object.tree": "/belletristik"
    }
  }
}

También puede usar consulta de coincidencia en su lugar, si no desea cambiar el término de entrada para la consulta. Dado que el partido se aplicará a Analyzer en /belletristik/ también. Esto, por lo tanto, intentará coincidir /belletristik (token generado por analizador cuando se aplica mediante la consulta de coincidencia en /belletristik/) y, por lo tanto, coincidirá con los documentos.

GET beam-2019.07.03/_search
{
  "query": {
    "match": {
      "object.tree": "/belletristik/"
    }
  }
}
0
Nishant 15 jul. 2019 a las 04:41