Pregunta

Al principio, estaba usando el analizador "Analizador de idiomas" y todo parecía funcionar muy bien.Hasta que me doy cuenta de que "A" no forma parte de la lista de palabras clave en francés

Así que decidí probar con bola de nieve.También parecía funcionar bien, pero en este caso elimina la palabra corta como "L '", "D'", ...

De ahí mi pregunta: ¿cómo usar bola de nieve, mantener los filtros de forma predeterminada y agregar una lista de marcas y la elision?

De lo contrario, ¿cómo cambiar la lista de puntos de parada para el analizador "analizador de idioma"?

y una última pregunta: ¿es realmente un interés para usar bola de nieve en lugar del analizador "analizador de idiomas"?¿Es más rápido?¿más relevantes?

Gracias

¿Fue útil?

Solución

Dado que un analizador es simplemente la combinación de un tokenizador y cero o más filtros, puede crear su propio analizador de bola de nieve personalizada, que imita los "valores predeterminados" y agrega en los sus propios filtros, como un filtro de token de elision .

Como se indica en la Documentación del analizador de bola de nieve < / a>:

Un analizador de tipo Snowball que utiliza el tokenizer estándar , con filtro estándar , filtro en minúsculas , filtro de parada , y filtro de bola de nieve .

Así que aquí hay un ejemplo que contiene ambas implementaciones, un analizador de bolas de nieve de con filtros predeterminados más puntos de parada personalizada y la elision , y un analizador de idiomas con una lista personalizada de puntos de parada :

{
  "settings": {
    "analysis": {
      "analyzer": {
       "custom_snowball_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "standard",
            "lowercase",
            "stop",
            "snowball",
            "custom_stop",
            "custom_elision"
          ]
        },
        "custom_language_analyzer": {
          "type": "french",
          "stopwords": ["a", "à", "t"]
        }
      },
      "filter": {
        "custom_stop": {
          "type": "stop",
          "stopwords": ["a", "à", "t"]
        },
        "custom_elision": {
          "type": "elision",
          "articles": ["l", "m", "t", "qu", "n", "s", "j"]
        }
      }
    }
  }
}

Veamos los tokens producidos por ambos analizadores, utilizando la misma oración de prueba:

curl -sXGET 'http://localhost:9200/testing/_analyze?analyzer=custom_snowball_analyzer&pretty' -d "Il a de la chance, parait-t-il que l'amour est dans le pré, mais au final à quoi bon ?." | grep token
  "tokens" : [ {
    "token" : "il",
    "token" : "de",
    "token" : "la",
    "token" : "chanc",
    "token" : "parait",
    "token" : "il",
    "token" : "que",
    "token" : "amour",
    "token" : "est",
    "token" : "dan",
    "token" : "le",
    "token" : "pré",
    "token" : "mai",
    "token" : "au",
    "token" : "final",
    "token" : "quoi",
    "token" : "bon",

curl -sXGET 'http://localhost:9200/testing/_analyze?analyzer=custom_language_analyzer&pretty' -d "Il a de la chance, parait-t-il que l'amour est dans le pré, mais au final à quoi bon ?." | grep token
  "tokens" : [ {
    "token" : "il",
    "token" : "de",
    "token" : "la",
    "token" : "chanc",
    "token" : "parait",
    "token" : "il",
    "token" : "que",
    "token" : "amou",
    "token" : "est",
    "token" : "dan",
    "token" : "le",
    "token" : "pré",
    "token" : "mai",
    "token" : "au",
    "token" : "final",
    "token" : "quoi",
    "token" : "bon",

Como puede ver, ambos analizadores producen casi los mismos tokens, excepto por "AMOUR" , que no se ha debido, no sé por qué ser honesto, desde el filtro de bola de nieve Utiliza un mierda debajo del capó.

Acerca de su segunda pregunta, esos filtros solo afectan el tiempo de indexación (durante la etapa de tokenización), diría que ambas implementaciones se desempeñarán casi igualmente (el analizador de idiomas debe ser un poco más rápido, ya que solo stem palabras francesas en este ejemplo) y no será notable a menos que planee indexar los grandes documentos bajo carga pesada.

Los tiempos de respuesta de búsqueda deben ser similares porque los tokens son casi igual (si iza solo documentos franceses), así que creo que Lucene proporcionará las mismas actuaciones.

Para concluir, elegiría el analizador de idiomas si está indexando solo documentos franceses, ya que es mucho más pequeño en la definición de asignación: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top