Elasticsearch使用pattern_replace过滤器忽略查询里的特殊字符

假设elasticsearch的一个字段存储了包含字母,数字以及特殊字符的字符串作为值,如ABC-123-456。

现在用户输入以下字符希望能匹配此值:

  • 完全匹配:ABC-123-456
  • 忽略特殊字符:ABC123456
  • 小写且忽略特殊字符:abc123456
  • 混有其他特殊字符串:Ab.c-123,456

这里可以使用pattern_replace过滤器以及自定义一个分析器来处理。

1、定义pattern_replace过滤器

"char_filter": {
    "specialCharactersFilter": {
        "pattern": "[^A-Za-z0-9]",
        "type": "pattern_replace",
        "replacement": ""
    }
}

2、使用上面的过滤定义分析器

"analyzer": {
    "alphanumericStringAnalyzer": {
        "filter": "lowercase",
        "char_filter": [
            "specialCharactersFilter"
        ],
        "type": "custom",
        "tokenizer": "standard"
    }
}

分析器命名为alphanumericStringAnalyzer

3、使用以上的分析器设置字段的映射

"order": {
    "type": "text",
    "fields": {
        "alphanumeric": {
        "type": "text",
            "analyzer": "alphanumericStringAnalyzer"
        },
        "raw": {
            "type": "keyword"
        }
    }
}

版权声明:著作权归作者所有。

相关推荐

.gitignore常用忽略文件配置

这里列出.gitignore常用忽略的文件# 编译后的源码后缀 # ################### *.com *.class *.dll *.exe *.o *.so # Packages # ############ # 最好是解压这些压缩包, *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip #

Vue实例里this的使用

要理解Vue实例里this的使用,首先要理解this在JavaScript里的用法,可以参考理解JavaScript普通函数以及箭头函数里使用的this。这是vue文档里的原话:All lifecycle hooks are called with their 'this' context pointing 

理解JavaScript普通函数以及箭头函数里使用的this

this普通函数的this普通函数的this是由动态作用域决定,它总指向于它的直接调用者。具体可以分为以下四项:this总是指向它的直接调用者, 例如 obj.func() ,那么func()里的this指的是obj。在默认情况(非严格模式,未使用 'use strict'),如果函数没有直接调用者,this为window在严格模式下,如果函数没有