EDIT: Um dies hinzuzufügen, scheinen die Synonyme mit grundlegenden querystring Abfragen arbeiten.Elasticsearch Synonym Analyzer funktioniert nicht
"query_string" : {
"default_field" : "location.region.name.raw",
"query" : "nh"
}
Dies gibt alle Ergebnisse für New Hampshire, aber eine „Übereinstimmung“ Abfrage für „nh“ lieferte keine Ergebnisse.
Ich versuche, um Synonyme zu meinen Standortfelder in meinem Elastic Index hinzuzufügen, so dass, wenn ich für „Mass“, eine Standortsuche zu tun „Ma“ oder „Massachusetts“ Ich habe das gleiche bekommen Ergebnisse jedes Mal. Ich habe den Filter "Synonyme" zu meinen Einstellungen hinzugefügt und die Zuordnung für Standorte geändert. Hier sind meine Einstellungen:
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"
]
}
}
Und die Zuordnung für das location.region Feld:
"region":{
"properties":{
"id":{"type": "long"},
"name":{
"type": "string",
"analyzer": "synonyms",
"fields":{"raw":{"type": "string", "index": "not_analyzed" }}
}
}
}
Aber der Synonyme Analysator scheint nicht zu tun, etwas zu werden. Diese Abfrage zum Beispiel:
"match" : {
"location.region.name" : {
"query" : "Massachusetts",
"type" : "phrase",
"analyzer" : "synonyms"
}
}
Das gibt Hunderte von Ergebnissen, aber wenn ich „Massachusetts“ mit „Ma“ oder „Mass“ I 0 Ergebnisse erhalten ersetzen. Warum funktioniert es nicht?
Ich möchte fragen, eine Frage zu Arbeitsmechanismus von Filtern. Wie funktionieren Filter im Analysator? In diesem Beispiel werden Kleinbuchstaben-Filter- und Rückgabetoken und -token von synonym_filter und synonym_filter verwendet und geben neue gefilterte Token zurück. Ist dieses Szenario richtig oder wie? – hkulekci
Ja, das Szenario, das Sie beschreiben, ist richtig :) Im Allgemeinen wird Tokenizer (in diesem Fall Standard-Tokenizer) ausgeführt und Token-Filter in der definierten Reihenfolge (in diesem Fall zuerst in Kleinbuchstaben und dann synonym_filter). Die Dokumentation erklärt es ziemlich gut http://www.elastic.co/guide/en/elasticsearch/reference/1.5/analysis-analyzers.html – moliware
ok danke. Ich lese sie :) Ich will sicher gehen. – hkulekci