编辑:要补充一点,同义词似乎可以与基本的查询字符串查询一起使用。
"query_string" : {
"default_field" : "location.region.name.raw",
"query" : "nh"
}
这将返回新罕布什尔州的所有结果,但对“ nh”的“匹配”查询将不返回结果。
我正在尝试将同义词添加到我的Elastic索引中的位置字段中,这样,如果我对“质量”,“马”或“马萨诸塞州”进行位置搜索,则每次都会得到相同的结果。我将同义词过滤器添加到设置中,并更改了位置映射。这是我的设置:
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"
]
}
}
以及location.region字段的映射:
"region":{
"properties":{
"id":{"type": "long"},
"name":{
"type": "string",
"analyzer": "synonyms",
"fields":{"raw":{"type": "string", "index": "not_analyzed" }}
}
}
}
但是同义词分析器似乎没有做任何事情。这个查询例如:
"match" : {
"location.region.name" : {
"query" : "Massachusetts",
"type" : "phrase",
"analyzer" : "synonyms"
}
}
这将返回数百个结果,但是如果我将“ Massachusetts”替换为“ Ma”或“ Mass”,则会得到0个结果。为什么不起作用?
过滤器的顺序为
filter":[
"lowercase",
"synonym_filter"
]
因此,如果elasticsearch首先将令牌“降低”,则在执行第二步时synonym_filter
,它将与您定义的任何条目都不匹配。
为了解决这个问题,我将用小写字母定义同义词
问题内容: 这是我的设置: 我的文件在主文件夹内的文件夹中。 这是我的查询: 中的字眼是:美国 ,美国,美国 。 所以这行不通。有趣的是,搜索正常,但当我在文件中输入任何单词时 除外。因此,例如,当我通常在搜索中键入 我们 的内容时,就会得到结果。有了这个分析仪, 我们 什么都不会给我。 我已经完成并连接到ES服务器,但仍然无法正常工作。 编辑 一个示例: 的示例(这来自前端): 编辑#2 : 这
问题内容: 我有一个现有的Elasticsearch索引,我想添加一个分析器,但是当我执行此命令时 我得到一个错误 {“错误”:“ IndexAlreadyExistsException [[nuxeo]已经存在]”,“状态”:400} 所以我必须在添加或刷新同义词文件之前删除索引不是很聪明。添加分析器的简单方法是吗?还是至少要刷新它?谢谢 问题答案: 您需要先关闭索引,更新分析器设置,然后再打开
问题内容: 我正在使用elasticsearch 1.1.2。 我在可搜索字段上使用具有不同权重的多重匹配查询。 例: {“ multi_match”:{“ query”:“这是一个测试”,“ fields”:[“ title ^ 3”,“ description ^ 2”,“ body”]}} 因此,在我的示例中,标题的重要性是正文的三倍。 我想根据找到的匹配项为每个字段自定义权重。 假设我搜索
我试图用_analyze API获得关键字标记的多字同义词。API对单字同义词返回预期结果,但对多字同义词不返回预期结果。以下是我的设置和分析链: 为什么analyze API不返回具有同义词类型的“foo bar”和“fooo bar”标记?
问题内容: 我的目标是搜索单词,而不考虑添加到其中的分析器。 我将 匹配 查询与 关键字分析器一起使用, 但我认为它可以与添加到该属性的默认分析器一起使用。 在elasticsearch中,我的作者文档结构像 索引映射: 在这里,我注意到我的标题分析器过滤器之一是 ngram 但是我在匹配查询中使用了 关键字分析器 ,以避免搜索过程中自动完成。 但是当我搜索时,上面的文件是匹配的。我期望的是组织具
因此,对于我的完成暗示前缀:“ela”,我希望输出为“Hello elastic Search”。 我知道一个简单的解决方案是添加多字段输入,如下所示: 但是,如果这是解决方案,那么使用分析器有什么意义呢?分析器在完成暗示中有意义吗? 我的映射: 我的文档: 搜索请求: 提前谢了。 吉米