Bonjour,
Je suis en train de monter en compétence sur elasticsearch.
Je m’intéresse maintenant aux analyzer et aux mapping afin d'avoir un moteur de recherche pertinent.
A ce sujet, j'ai lu pas mal d'article en plus de la documentation, que j'indiquerais plus tard, cela pourra servir à d'autres.
Malheureusement, je rencontre quand même des problèmes avec les apostrophes et les accents.
Je m'explique, la recherche sur 'etoile' ne me remonte pas mes documents avec le token 'étoile'.
Pour les apostrophes, l'indexation se fait sur "l'étoile" au lieu de juste 'étoile'.
Je vous joins ma configuration voir si quelqu'un peut me renseigner à ce sujet.
Les settings
✘ svi@spawn ~ http localhost:9200/user/_settings
HTTP/1.1 200 OK
Content-Length: 1039
Content-Type: application/json; charset=UTF-8
{
"user": {
"settings": {
"index": {
"analysis": {
"analyzer": {
"custom_french_analyzer": {
"filter": [
"stopwords",
"asciifolding",
"lowercase",
"snowball",
"elision",
"worddelimiter",
"french_stemmer"
],
"tokenizer": "nGram",
"type": "custom"
},
"custom_search_analyzer": {
"filter": [
"stopwords",
"asciifolding",
"lowercase",
"snowball",
"elision",
"worddelimiter",
"french_stemmer"
],
"tokenizer": "standard",
"type": "custom"
},
"tag_analyzer": {
"filter": [
"asciifolding",
"lowercase"
],
"tokenizer": "keyword"
}
},
"filter": {
"elision": {
"articles": [
"l",
"m",
"t",
"qu",
"n",
"s",
"j",
"d",
"c",
"jusqu",
"quoiqu",
"lorsqu",
"puisqu"
],
"type": "elision"
},
"french_stemmer": {
"language": "light_french",
"type": "stemmer"
},
"snowball": {
"language": "French",
"type": "snowball"
},
"stopwords": {
"ignore_case": "true",
"stopwords": "_french_",
"type": "stop"
},
"worddelimiter": {
"type": "word_delimiter"
}
},
"tokenizer": {
"nGram": {
"max_gram": "20",
"min_gram": "2",
"type": "nGram"
}
}
},
"creation_date": "1436370441302",
"number_of_replicas": "1",
"number_of_shards": "5",
"uuid": "Jm75RQEuQ5-UvkeMmE-XYw",
"version": {
"created": "1050299"
}
}
}
}
}
Le mapping :
svi@spawn ~ http localhost:9200/user/_mapping
HTTP/1.1 200 OK
Content-Length: 550
Content-Type: application/json; charset=UTF-8
{
"user": {
"mappings": {
"heroes": {
"_all": {
"auto_boost": true
},
"dynamic_templates": [
{
"string_fields": {
"mapping": {
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
},
"index": "analyzed",
"index_analyzer": "custom_french_analyzer",
"omit_norms": true,
"search_analyzer": "custom_search_analyzer",
"type": "string"
},
"match": "*",
"match_mapping_type": "string"
}
}
],
"properties": {
"about": {
"type": "string"
},
"age": {
"type": "long"
},
"first_name": {
"boost": 2.0,
"type": "string"
},
"interests": {
"type": "string"
},
"last_name": {
"boost": 3.0,
"type": "string"
}
}
}
}
}
}
Pour finir, voici un exemple de document indexer (ce n'est qu'un jeu de test ;))
{
"last_name": "Batman",
"first_name": "Bruce Wayne",
"age": 41,
"about": "Batman est un personnage de fiction appartenant à l'univers de DC Comics. Créé par le dessinateur Bob Kane et le scénariste Bill Finger, il apparaît pour la première fois dans le comic book Detective Comics no 27 (date de couverture : mai 1939 mais la date réelle de parution est le 30 mars 1939) avec le nom de The Bat-Man. Bien que ce soit le succès de Superman qui a amené sa création, il se détache de ce modèle puisqu'il n'a aucun pouvoir surhumain. Il n'est qu'un humain nommé Bruce Wayne décidé à lutter contre le crime après avoir vu ses parents abattus par un voleur dans une ruelle de Gotham City, la ville où se déroulent la plupart de ses aventures. Malgré sa réputation de héros solitaire, il sait s'entourer d'alliés, comme Robin, son maître d'hôtel Alfred Pennyworth ou encore le commissaire de police James Gordon.",
"interests": [
"Batmobile",
"Batarang",
"Batgrappin"
]
}
Et donc, mes sources:
- http://tekcollab.imdeo.com/astuces-et-retour-dexperience-sur-elasticsearch/
- http://obtao.com/blog/2013/10/configuration-elasticsearch-de-maniere-optimale/
- http://dev.af83.com/2013/05/22/quelques-bases-pour-preparer-une-indexation-dans-elasticsearch.html
Merci d'avance pour votre aide.