具有模糊性的 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中的使用增删改查(模糊查询批量查询)

Lucene/kibana查询 语法

具有 multi_match 和 bool_prefix 类型的 Elasticsearch 模糊性

Elasticsearch es ElasticSearch集群故障案例分析: 警惕通配符查询 Wildcard