EDIT: Pour ajouter à cela, les synonymes semblent fonctionner avec des requêtes querystring de base. Cela renvoie tous les résultats pour New Hampshire, mais une requête "match" pour "nh" ne renvoie aucun résultat.L'analyseur de synonyme Elasticsearch ne fonctionne pas
Je suis en train d'ajouter des synonymes à mes champs d'emplacement dans mon index élastique, de sorte que si je fais une recherche d'emplacement pour « Mass », « Ma », ou « Massachusetts » Je vais même résultats à chaque fois. J'ai ajouté le filtre de synonymes à mes paramètres et modifié le mappage pour les emplacements. Voici mes paramètres:
analysis":{
"analyzer":{
"synonyms":{
"filter":[
"lowercase",
"synonym_filter"
],
"tokenizer": "standard"
}
},
"filter":{
"synonym_filter":{
"type": "synonym",
"synonyms":[
"United States,US,USA,USA=>usa",
"Alabama,Al,Ala,Ala",
"Alaska,Ak,Alas,Alas",
"Arizona,Az,Ariz",
"Arkansas,Ar,Ark",
"California,Ca,Calif,Cal",
"Colorado,Co,Colo,Col",
"Connecticut,Ct,Conn",
"Deleware,De,Del",
"District of Columbia,Dc,Wash Dc,Washington Dc=>Dc",
"Florida,Fl,Fla,Flor",
"Georgia,Ga",
"Hawaii,Hi",
"Idaho,Id,Ida",
"Illinois,Il,Ill,Ills",
"Indiana,In,Ind",
"Iowa,Ia,Ioa",
"Kansas,Kans,Kan,Ks",
"Kentucky,Ky,Ken,Kent",
"Louisiana,La",
"Maine,Me",
"Maryland,Md",
"Massachusetts,Ma,Mass",
"Michigan,Mi,Mich",
"Minnesota,Mn,Minn",
"Mississippi,Ms,Miss",
"Missouri,Mo",
"Montana,Mt,Mont",
"Nebraska,Ne,Neb,Nebr",
"Nevada,Nv,Nev",
"New Hampshire,Nh=>Nh",
"New Jersey,Nj=>Nj",
"New Mexico,Nm,N Mex,New M=>Nm",
"New York,Ny=>Ny",
"North Carolina,Nc,N Car=>Nc",
"North Dakota,Nd,N Dak, NoDak=>Nd",
"Ohio,Oh,O",
"Oklahoma,Ok,Okla",
"Oregon,Or,Oreg,Ore",
"Pennsylvania,Pa,Penn,Penna",
"Rhode Island,Ri,Ri & PP,R Isl=>Ri",
"South Carolina,Sc,S Car=>Sc",
"South Dakota,Sd,S Dak,SoDak=>Sd",
"Tennessee,Te,Tenn",
"Texas,Tx,Tex",
"Utah,Ut",
"Vermont,Vt",
"Virginia,Va,Virg",
"Washington,Wa,Wash,Wn",
"West Virginia,Wv,W Va, W Virg=>Wv",
"Wisconsin,Wi,Wis,Wisc",
"Wyomin,Wi,Wyo"
]
}
}
Et le mappage pour le champ location.region:
"region":{
"properties":{
"id":{"type": "long"},
"name":{
"type": "string",
"analyzer": "synonyms",
"fields":{"raw":{"type": "string", "index": "not_analyzed" }}
}
}
}
Mais l'analyseur de synonymes ne semble pas faire quoi que ce soit. Cette requête, par exemple:
"match" : {
"location.region.name" : {
"query" : "Massachusetts",
"type" : "phrase",
"analyzer" : "synonyms"
}
}
Cela renvoie des centaines de résultats, mais si je remplace « Massachusetts » avec « Ma » ou « Mass » je reçois 0. Pourquoi ça ne marche pas?
Je veux poser une question sur le mécanisme de travail des filtres. Comment fonctionnent les filtres dans l'analyseur? Dans cet exemple, le travail de filtre en minuscules et les jetons de retour et les jetons sont pris par synonym_filter, et synonym_filter fonctionne et renvoie de nouveaux jetons filtrés. Ce scénario est-il correct ou comment? – hkulekci
Oui, le scénario que vous décrivez est correct :) En général, tokenizer (dans ce cas standard tokenizer) est exécuté, puis filtre les jetons dans l'ordre défini (dans ce cas, minuscule d'abord, puis synonyme_filtre). La documentation l'explique assez bien http://www.elastic.co/guide/fr/elasticsearch/reference/1.5/analysis-analyzers.html – moliware
ok merci. Je les lis :) Je veux m'assurer. – hkulekci