elasticsearch, analizador spanish con filtro fonético

Pasos a seguir para crear un indice con un analizdor en español con reconocimiento de fonético.

Especialmente util si queremos buscar para un texto como este:

  • “Habia una vez un barquito chiquitito que navegaba ….”

palabras como

  • avia, nabegava

es decir, palabras mal escritas pero que se pronuncian igual.

Pasos previo necesarios

Instalar plugin

En cada nodo debemos instalar el plugin y reiniciar.

sudo bin/plugin install analysis-phonetic

Crear el indice y el mapping

curl -XDELETE http://localhost:9201/indice_fonetico

curl -XPUT http://localhost:9201/indice_fonetico

curl -XPOST http://localhost:9201/indice_fonetico/_close

curl -XPUT http://localhost:9201/indice_fonetico/_settings?pretty -d '{
  "analysis" : {
    "analyzer":{
      "spanish_no_accent": {
          "tokenizer": "standard",
          "filter":  [ "lowercase", "asciifolding", "spanish_stop", "filtro_fonetico", "spanish_stemmer" ]
          }
    },
    "filter" : {
            "spanish_stemmer" : {
                "type" : "stemmer",
                "name" : "spanish"
            },
            "spanish_stop": {
                             "type":        "stop",
                             "stopwords": [ "_spanish_" ]
      },
      "filtro_fonetico": {
          "type": "phonetic",
          "encoder": "beidermorse",
          "replace": false,
          "languageset": ["spanish"]
      }
          }
  }
}'

curl -XPOST http://localhost:9201/indice_fonetico/_open

curl -XPUT http://localhost:9201/indice_fonetico/_mapping/documento?pretty -d '{
"properties":{
  "documento":{
     "type":"string",
     "analyzer":"spanish_no_accent"
  }
 }
}'

Indexar datos y preparar una query

Indexamos un documento

PUT indice_fonetico/documento/1
{
  "documento": "Habia una vez un barquito chiquitito que navegaba ...."
}

Realizamos una búsqueda

  • avia

Query y respuesta

GET indice_fonetico/documento/_search
{
  "query": {
    "match": {
      "documento": {
        "query": "avia"
      }
    }
  }
}
{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1.7499999,
    "hits": [
      {
        "_index": "indice_fonetico",
        "_type": "documento",
        "_id": "4",
        "_score": 1.7499999,
        "_source": {
          "documento": "Habia una vez un barquito chiquitito que navegaba ...."
        }
      }
    ]
  }
}

Términos generados por este analizador

En cualquier momento podemos ver los términos que genera este analizador, para entender mejor las búsquedas que podemos realizar con este analizador y el nuevo filtro fonético.

Invocación del analizador

POST prueba_fonetica/_analyze
{
  "analyzer": "spanish_no_accent",
  "text":     "barquito"
}

Términos generados por el analizador

{
  "tokens": [
    {
      "token": "barkit",
      "start_offset": 0,
      "end_offset": 8,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "borkit",
      "start_offset": 0,
      "end_offset": 8,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "varkit",
      "start_offset": 0,
      "end_offset": 8,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "vorkit",
      "start_offset": 0,
      "end_offset": 8,
      "type": "<ALPHANUM>",
      "position": 0
    }
  ]
}

Para entender mejor el comportamiento de este filtro fonético podemos crear un analizador donde solamente tengamos como filtro el filtro fonético.

curl -XPUT http://localhost:9201/indice_fonetico/_settings?pretty -d '{
  "analysis" : {
    "analyzer":{
      "spanish_no_accent": {
          "tokenizer": "standard",
          "filter":  [ "lowercase", "filtro_fonetico" ]
          }
    },
    "filter" : {
      "filtro_fonetico": {
          "type": "phonetic",
          "encoder": "beidermorse",
          "replace": false,
          "languageset": ["spanish"]
      }
    }
  }
}'
Anuncios

Crear nuestro primer cluster con Elasticsearch

Elasticsearch

En este articulo vamos a ver los siguientes puntos.

  • Crear un cluster de Elasticsearch formado por 3 nodos
  • Modificaremos el número de replicas y shards por defecto con los que se crearán los índices
  • Comprobaremos la salud y el estado del cluster
  • Ver algunas herramientas de motorización del cluster.

Sigue leyendo

Elasticsearch, el filtro geo_distance y el tipo de dato geo_point

Elasticsearch

Este filtro devuelve los documentos encontrados dentro de la distancia especificada. Para ello los documentos indexados deben tener entre sus campos uno con las coordenadas latitud y longitud, sobre los cuales le hemos indicado a Elasticsearch que los trate como un campo del tipo geo_point.

Sigue leyendo

Funcionamiento de un Cluster en Elasticsearch

Elasticsearch

Gracias al gran trabajo de la gente de Elasticsearch (ES a partir de ahora) la creación de un cluster es muy sencilla. Una instalación por defecto de ES en varios máquinas o en la misma máquina nos permite crear un cluster sin tener que realizar ninguna modificación de sus ficheros de configuración.

Sin embargo esta configuración por defecto no será válida en la mayoría de los casos. Lo normal es tener 1 o varios cluster diferentes, y que cada cluster mantenga 1 o varios indices, donde cada indice mantendrá muy probablemente varios tipos de documentos diferentes.

Aunque también podría darse el caso de solo necesitar un único cluster, con ‘n’ nodos donde mantendremos todos los indices de nuestra empresa.

¿Qué ocurre cuando un nodo de ES arranca?

Sigue leyendo

Introducción a Elasticsearch

Elasticsearch

Es un motor de búsqueda, análisis e indexado de texto, distribuido, replicado, escalable, tolerante a fallos y en tiempo real, capaz de realizar tanto búsqueda de texto complejas como búsquedas geoespaciales.

Todo las operaciones de indexado, búsqueda, configuración etc se hacen a través de su interfaz REST, lo que facilita su integración con cualquier sistema o herramienta capaz de realizar peticiones Http GET y POST.

Y lo mejor de todo, se distribuye bajo licencia Apache 2, una de las licencias open source más flexibles que existen en la actualidad. Podemos usar y modificar Elasticsearch (desde ahora ES) libremente.

Sigue leyendo