自己搭建服务器网站开发软件,庆阳网站设计报价,通过数字化营销搭建网络建设,百度官网首页登陆使用Elasticsearch 5#xff0c;我们有一个字段#xff0c;例如驾驶执照编号#xff0c;其中的值可能包含特殊字符#xff0c;并且由于用户在有限的验证范围内输入了值#xff0c;因此值的大小写不一致。 例如#xff0c;这些是假设值#xff1a; CA-123-456-789 WI.1… 使用Elasticsearch 5我们有一个字段例如驾驶执照编号其中的值可能包含特殊字符并且由于用户在有限的验证范围内输入了值因此值的大小写不一致。 例如这些是假设值 CA-123-456-789 WI.12345.6789 tx123456789 az-123-xyz-456 … 在我们的应用程序中最终用户需要按该字段进行搜索。 我们有一项业务要求即用户应该不必输入任何特殊字符例如连字符和句号即可取回记录。 因此对于上面的第一个示例用户应该能够键入以下任何值并查看该记录 CA-123-456-789完全匹配 CA123456789无特殊字符 ca123456789小写字母无特殊字符 Ca.123.456-789混合大小写和特殊字符 我们的方法是编写一个忽略特殊字符的自定义分析器然后针对该字段进行查询。 步骤1创建模式替换字符过滤器和自定义分析器 我们定义了一种模式替换字符过滤器以删除索引上的所有非字母数字字符如下所示 char_filter: {specialCharactersFilter: {pattern: [^A-Za-z0-9],type: pattern_replace,replacement: }
} 然后我们使用该过滤器创建一个自定义分析器 在索引上将其命名为“ alphanumericStringAnalyzer” analyzer: {alphanumericStringAnalyzer: {filter: lowercase,char_filter: [specialCharactersFilter],type: custom,tokenizer: standard}
} 步骤2使用自定义分析器定义字段映射 下一步是定义一个使用新的“ alphanumericStringAnalyzer”分析器的新字段映射 driversLicenseNumber: {type: text,fields: {alphanumeric: {type: text,analyzer: alphanumericStringAnalyzer},raw: {type: keyword}}
} 步骤3对新字段运行查询 在我们的例子中我们在“ should”子句中将此匹配查询作为布尔查询的一部分 {match : {driversLicenseNumber.alphanumeric : {query : Ca.123.456-789,operator : OR,boost : 10.0}}
}翻译自: https://www.javacodegeeks.com/2018/03/elasticsearch-ignore-special-characters-query-pattern-replace-filter-custom-analyzer.html