comment faire pour configurer le synonyms_path dans elasticsearch
je suis assez nouveau à elasticsearch et je veux utiliser des synonymes, j'ai ajouté ces lignes dans le fichier de configuration:
index :
analysis :
analyzer :
synonym :
type : custom
tokenizer : whitespace
filter : [synonym]
filter :
synonym :
type : synonym
synonyms_path: synonyms.txt
puis j'ai créé un indice de test:
"mappings" : {
"test" : {
"properties" : {
"text_1" : {
"type" : "string",
"analyzer" : "synonym"
},
"text_2" : {
"search_analyzer" : "standard",
"index_analyzer" : "synonym",
"type" : "string"
},
"text_3" : {
"type" : "string",
"analyzer" : "synonym"
}
}
}
}
et insrted un essai de type avec ces données:
{
"text_3" : "foo dog cat",
"text_2" : "foo dog cat",
"text_1" : "foo dog cat"
}
synonyms.txt contient "foo,bar,baz", et quand je fais une recherche pour les foo elle renvoie à ce que j'attendais, mais quand je fais une recherche pour baz ou la barre de retour à zéro des résultats:
{
"query":{
"query_string":{
"query" : "bar",
"fields" : [ "text_1"],
"use_dis_max" : true,
"boost" : 1.0
}}}
résultat:
{
"took":1,
"timed_out":false,
"_shards":{
"total":5,
"successful":5,
"failed":0
},
"hits":{
"total":0,
"max_score":null,
"hits":[
]
}
}
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si votre problème est que vous avez défini mauvais la synonymes de "bar". Comme vous l'avez dit vous êtes assez nouveau, je vais mettre un exemple similaire à la vôtre, qui fonctionne. Je veux vous montrer comment elasticsearch traiter avec des synonymes, à la recherche du temps et lors de l'indexation. Espérons que cela aide.
Première chose à créer le synonyme du fichier:
Maintenant, je créer l'index avec les paramètres que vous essayez de tester:
Noter que synonyms.txt doit être dans le même répertoire que le fichier de configuration depuis que le chemin est relatif à la config dir.
Maintenant indice de doc:
Maintenant les recherches
De la recherche dans le champ text_1
Vous obtenir le document, parce que baz est synonyme de foo et à l'indice de temps foo est élargi avec ses synonymes
De la recherche dans le champ text_2
résultat:
Je n'ai pas le frappe parce que je n'ai pas de développer des synonymes lors de l'indexation (de série de l'analyseur). Et, depuis que je suis à la recherche de baz et baz n'est pas dans le texte, je n'obtiens aucun résultat.
De la recherche dans le champ text_3
text_3 était indices sans l'expansion des synonymes. Comme je suis à la recherche de foo, qui ont "baz" comme l'un des synonymes-je obtenir le résultat.
Si vous souhaitez déboguer vous pouvez utiliser
_analyze
point de terminaison par exemple:résultat: