具有模糊性的 Elasticsearch 通配符查询字符串
Posted
技术标签:
【中文标题】具有模糊性的 Elasticsearch 通配符查询字符串【英文标题】:Elasticsearch wildcard query string with fuzziness 【发布时间】: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 这看起来很有希望。我会在星期一玩这个 对于其他人来说,***.com/questions/29712954/… 工作得很好 【参考方案1】:您可以尝试 EdgeNgramTokenFilter,在应用于所需字段的分析器上使用它并对其进行模糊搜索。
【讨论】:
以上是关于具有模糊性的 Elasticsearch 通配符查询字符串的主要内容,如果未能解决你的问题,请参考以下文章
(21)ElasticSearch java项目中matchmultimathtermterms以及范围前缀通配符模糊类型ids等查询示例
Elasticsearch 警惕使用 wildcard 检索!然后呢?
Elasticsearch在thinkphp5中的使用增删改查(模糊查询批量查询)