Bonjour,
Je débute avec ElasticSearch (5.4) et je m’intéresse particulièrement aux analyzers.
Je cherche à faire une recherche qui peut être partielle mais dont l'ordre des mots à une importance.
Pour exemple, par rapport au document indexé ci-dessous :
PUT my_index/doc/1
{
"description": "Recherchez (et analysez) vos données en temps réel."
}
Si on cherche les chaînes de caractères "Recherchez (et" ou "rchez (e", par exemple, le document va être trouvé mais pour la chaîne "Recherchez et analysez (et" ou "Recherch (et" le document ne va pas être trouvé. La ponctuation est, elle aussi, importante.
Pour le moment, cette configuration m'a donné les meilleurs résultats :
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer",
"filter": [
"lowercase"
]
},
"my_analyzer_search": {
"tokenizer": "keyword",
"filter": "lowercase"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 8,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol",
"whitespace"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"description": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "my_analyzer_search"
}
}
}
}
}
J'utilise un analyzer pour l'indexation utilisant un tokenizer de type N-Gram pour la recherche partielle et, pour la recherche, un analyzer différent de type keyword pour l'ordre des mots.
Cependant mes documents pouvant être volumineux (jusqu'à une dizaine de Mo), cela demande beaucoup de ressources lors de l'indexation et la taille de l'index est énorme.
Est-ce tout de même une bonne solution ? Y-a t-il d'autres alternatives pour ce cas d'utilisation ?
Merci d'avance pour votre aide.