Crear analizadores en elasticsearch

Para crear un analizador en elasticsearch lo primero que debes saber es que hay que configurarlo en cuenta se crea un índice.

Puedes crear distintos analizadores dependiendo de tus necesidades, esto viene muy bien a la hora de hacer una consulta, ya que puedes adaptarla a tus necesidades.

Este es un json para la creación de un índice donde incluimos dos analizadores. A cada uno de ellos debemos definirle los filtros que van a usar.

PUT /prueba-analizadores
{
  "aliases": {

  },
  "mappings": {
	"properties": {
		"id": {
			"type":"keyword"
		},
		"titulo": {
			"type": "text",
			"analyzer": "analizador_espanol"
		},
		"descripcion": {
			"type": "text",
			"analyzer": " analizador_espanol _no_stop"
		},
		"fecha": {
			"type": "date"
		},
		"url": {
			"type": "keyword",
			"index": false
		}
    }
},
  "settings": {
   "analysis": {
      "filter": {
        "espanol_stop": {
          "type":       "stop",
          "stopwords":  "_spanish_" 
        },
        "espanol_stemmer": {
          "type":       "stemmer",
          "language":   "light_spanish"
        }
      },
      "analyzer": {
        " analizador_espanol ": {
          "tokenizer":  "standard",
			"filter":  [ "lowercase", "trim", "asciifolding", "espanol_stop", "espanol_stemmer" ]
        },
        " analizador_espanol _no_stop ": {
          "tokenizer":  "standard",
			"filter":  [ "lowercase", "trim", "asciifolding", " espanol_stemmer " ]
        }		
      }
    }
  }
}

Analizamos el código.

En el PUT introducimos el nombre del índice y en alias lo dejamos en blanco.

Creamos el mapping con los campos en este caso un ID, título, descripción, fecha y url.

Como vamos a centrar la búsqueda en el título y la descripción vamos a configurar el analizador que queremos usar en cada caso, en el ejemplo título usará ‘analizador_espanol’ y descripción ‘analizador_espanol_no_stop’. Ahora veremos cómo funciona o qué significa cada uno.

Dentro del settings es dónde irán nuestros filtros o tokens y nuestros analizadores, de momento vamos a explicar los filtros.

      "filter": {
        "espanol_stop": {
          "type":       "stop",
          "stopwords":  "_spanish_" 
        },
        "espanol_stemmer": {
          "type":       "stemmer",
          "language":   "light_spanish"
        }
      },

Estos filtros o tokens de elasticsearch nos ayudaran a definir cómo queremos que sea una búsqueda. Nos ayudará por ejemplo a buscar similitudes, dividir palabra o buscar frases completas.

En este caso nos centraremos en personalizar token de elasticsearch para adaptarlo al idioma en español.

‘espanol_stop’ quitará los artículos en español de las frases que se busquen. 

‘La mujer de rojo saltó por encima de la valla’ se quedaría en; mujer, rojo, saltó, encima, valla.

‘espanol_stemmer’ nos ayudará con las raíces de las palabras para ampliar la búsqueda de palabras hermanas. Hay dos opciones ‘light_spanish’ o ‘spanish’ el cual es mucho más agresivo y recorta mucho más las palabras.

‘La mujer de rojo saltó por encima de la valla’ se quedaría en; La, mujer, de, rojo, salt, por, encim, de, la, vall.’

Es hora de crear nuestros analizadores.

"analyzer": {
" analizador_espanol ": {
"tokenizer":  "standard",
"filter":  [ "lowercase", "trim", "asciifolding", "espanol_stop", "espanol_stemmer" ]
        	},
        " analizador_espanol _no_stop ": {
"tokenizer":  "standard",
"filter":  [ "lowercase", "trim", "asciifolding", " espanol_stemmer " ]
     	 }		
  }

Creamos el analizador en español (analizador_espanol).

Usaremos el tokenizer stardard e incluiremos nuestros filtros.

towercase: Cambia el texto en minúsculas.

trim: Elimina los espacios en blanco iniciales y finales.

asciifolding: Convierte caracteres alfabéticos, numéricos y simbólicos que no están en el bloque Unicode Básico Latino (primeros 127 caracteres ASCII).

espanol_stop: Nuestro filtro para quitar los artículos a una frase.

espanol_stemmer: Nuestro filtro para coger la raíz de la palabra.

El analizador_espanol_no_stop le pondremos los mismos filtros pero desecharemos el filtro de los artículos. Puede servir para buscar frases completas.

 

 

Web, Curl, Elasticsearch

No hay comentarios en “Crear analizadores en elasticsearch”