【发布时间】:2015-07-19 20:48:54
【问题描述】:
我们有一个项目索引,我正在尝试对项目名称进行模糊通配符。 查询
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": {
"query_string": {
"fields": [
"name.suggest"
],
"query": "avacado*",
"fuzziness": 0.7
}
}
}
}
}
索引中的字段和起作用的分析器 "
suggest_analyzer":{
"type": "custom",
"tokenizer": "standard",
"filter": ["standard", "lowercase", "shingle", "punctuation"]
}
"punctuation" : {
"type" : "word_delimiter",
"preserve_original": "true"
}
"name": {
"fields": {
"name": {
"type": "string",
"analyzer": "stem"
},
"suggest":{
"type": "string",
"analyzer": "suggest_analyzer"
},
"untouched": {
"include_in_all": false,
"index": "not_analyzed",
"index_options": "docs",
"omit_norms": true,
"type": "string"
},
"untouched_lowercase": {
"type": "string",
"index_analyzer": "lowercase",
"search_analyzer": "lowercase"
}
},
"type": "multi_field"
},
问题是这样的
名称为“Avocado Test”的项目将匹配以下项目
- 鳄梨*
- avo*
- 鳄梨
但匹配失败
- 鳄梨*
- ava*
- ava~2
我似乎无法使用通配符进行模糊处理,它似乎是模糊工作或通配符工作,但不是组合。
es版本是1.3.1
请注意,我的查询已简化,我们还有其他过滤正在进行,但我将其归结为仅查询以消除结果中的任何歧义。我尝试使用建议功能,但它们不允许我们需要的过滤级别。
是否有任何其他方法可以处理建议/预先输入样式搜索并模糊地捕捉拼写错误?
【问题讨论】:
-
看起来您正在寻找的是“模糊预输入”,您也许可以通过 completion suggester 实现此目的
-
this answer 对您有帮助吗?
-
@keety 如果我们不需要进行任何过滤,完成建议会有所帮助。因为每个执行预输入的用户都可以通过 meta_tagging 系统和其他过滤器获取索引中文档的特定子集。我们还有一些规则规定物品不能有标签 x,所以我们必须否定哪些条件还不允许
-
@SloanAhrens 这看起来很有希望。我会在星期一玩这个
-
对于其他人来说,stackoverflow.com/questions/29712954/… 工作得很好
标签: search elasticsearch wildcard