2017-06-29 3 views
0

Exécution de la version élastique 1.6Analyseur personnalisé ne fonctionne pas dans elasticsearch

J'essaie de définir un analyseur personnalisé pour mon index dans elasticsearch. Mon index/a des propriétés qui contiennent des accents et des caractères spéciaux.

Comme l'un de mes noms de propriété a une valeur comme ceci, "name" => "Esta loca". donc ce que je veux réaliser est, chaque fois que je suis en train de chercher de cette façon, http://localhost:9200/tutorial/helloworld/_search?q=esta

j'obtenir le résultat pour « Está loca ». Je suis passé par le lien suivant et configuré l'analyseur nécessaire qui est expliqué dans le lien. https://www.elastic.co/guide/en/elasticsearch/guide/current/asciifolding-token-filter.html

curl -XPUT 'localhost:9200/tutorial?pretty' -H 'Content-Type: application/json' -d' 
{ 
"mappings":{ 
    "helloworld":{ 
    "properties": { 
    "name": { 
     "type":   "string", 
     "analyzer":  "standard", 
     "fields": { 
     "folded": { 
      "type":  "string", 
      "analyzer": "folding" 
     } 
     } 
    } 
    } 
} 
}, 
"settings": { 
    "analysis": { 
     "analyzer": { 
     "folding": { 
      "tokenizer": "standard", 
      "filter": [ "lowercase", "asciifolding" ] 
     } 
     } 
    } 
    } 
}' 

J'ai configuré ce tout en créant l'index et fait quelques entrées comme celui-ci pour le test,

curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "name": "Está loca!" }' 
curl -X POST 'http://localhost:9200/tutorial/helloworld/2' -d '{ "name": "Está locá!" }' 

mais en cherchant comme ça, http://localhost:9200/tutorial/helloworld/_search?q=esta rien ne se passe. Je veux juste quand un utilisateur recherche dans toutes les langues, par exemple en anglais, il devrait obtenir le même résultat. S'il vous plaît, n'importe qui peut vous aider, comment puis-je y arriver pendant une semaine?

Répondre

1

vous ne seriez pas en mesure de rechercher esta mot-clé dans le champ _all. Comme recherche élastique par défaut, appliquer uniquement l'analyseur standard lors de la construction _allfield.

de sorte que votre requête suivante

GET folding_index1/helloworld/_search?q=esta 

produit suivant requête de match dsl élastique.

GET folding_index1/helloworld/_search 
{ 
    "query": { 
    "match": { 
     "_all": "esta" 
    } 
    } 
} 

qui recherche contre champ _all et donc n'a pas pu trouver jeton plié pour le nom.

Vous pouvez faire ce qui suit, mais même avec include_in_all mentionné pour multifield, il applique toujours l'analyseur standard pour champ _all.

PUT folding_index1 
{ 
    "mappings": { 
     "helloworld": { 
      "properties": { 
       "name": { 
        "type": "string", 
        "analyzer": "standard", 
        "fields": { 
         "folded": { 
          "type": "string", 
          "analyzer": "folding", 
          "include_in_all": true 
         } 
        } 
       } 
      } 
     } 
    }, 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "folding": { 
        "tokenizer": "standard", 
        "filter": ["lowercase", "asciifolding"] 
       } 
      } 
     } 
    } 
} 

Une requête comme suit peut fonctionner pour vous. Plus d'informations sur _all field analyzer

POST folding_index1/_search?q=name.folded:esta 
+0

folding_index1 <- qu'est-ce? Est-ce mon nom d'index, c'est-à-dire "tutorial"? –

+0

Il me donne erreur suivante lors de la création d'index dans curl, {"erreur": "MapperParsingException [mappage [helloworld]]; imbriqué: ElasticsearchParseException [fielddata doit être un hachage mais était de type: class java.lang.Boolean] ; "," status ": 400} –

+0

ouais c'est le nom que j'ai utilisé pour ma référence. J'ai changé les mappings, on dirait que vous utilisez une ancienne version d'élastique. J'ai ajouté fielddata boolean pour mon débogage du tokenizer. devrait fonctionner maintenant – user3775217

0

Ce lien m'a aussi beaucoup aidé, donne l'analyseur exact de mon scénario.

https://vanwilgenburg.wordpress.com/2013/08/03/diacritics-in-elasticsearch/

+0

cela échoue sur es version 5.4 pour moi. – user3775217

+0

Oui votre droit @ user3775217 mais les paramètres et les mappages suggérés par le lien sont parfaits pour mon scénario. Pouvez-vous m'aider à convertir le json des paramètres et des mappages du lien dans les versions prises en charge par ES 5.4 ou plus. Aussi, j'ai demandé une quetion sur stackoverflow pour cela https://stackoverflow.com/questions/44844765/elasticsearch-giving-exception-for-the-json –

+0

oui, même shay mentionné sur le lien élastique officiel dit, ce n'est pas pris en charge pour l'analyseur de changement pour _all. J'étais sur 5.4 donc j'ai copié au champ de _all à un nouveau champ avec l'analyseur personnalisé. Merci – user3775217