我需要为Elasticsearch 1.7创建一个自定义分析器,以支持邮政编码区(邮政编码的第一部分)搜索,其中搜索词中的前两个字母字符仅查找以该确切术语开头的邮政编码。
换句话说,搜索词是" G"发现:
G1
G23
但不是
GL2
GL4
" GL"的搜索词产生
GL2
GL4
等
我正在使用带有正则表达式的模式标记生成器的概念,该正则表达式对邮政编码的第一部分的字母和数字组件进行分组。根据{{3}},"正则表达式应该与令牌分隔符匹配,而不是令牌本身"。但是,我不清楚正则表达式输出中会出现什么样的情况。
到目前为止,我提出的分析仪看起来像这样:
{
"index": {
"analysis": {
"analyzer": {
"autocompletePostcodeDistrict": {
"tokenizer": "postcodeTokenizer"
}
},
"tokenizer": {
"postcodeTokenizer": {
"type": "pattern",
"pattern": "\b([a-z]{1,2})(\\d[a-z])|([a-z]{1,2})(\\d{1,2})\b",
"lowercase": "true"
}
}
}
}
}
我通过正则表达式运行了以下邮政编码区,结果如下。
G1
1: <blank>
2: <blank>
3:G
4:1
GL2
1: <blank>
2: <blank>
3:GL
4:2
G12
1: <blank>
2: <blank>
3:G
4:12
WC1V
1: WC
2: 1V
3: <blank>
4: <blank>
我还没有找到一种压制空白群体的方法。但是,表达式似乎以一种方式解析邮政编码区域,这种方式创建了与我认为令牌生成者需要创建的标记相匹配的组。但是,分析仪没有所需的搜索行为。
有人可以伸出援助之手吗?
更新
第一个修复方法是将正则表达式中的字符从[A-Z]更改为[a-z],以反映所有过滤都是小写的情况(上面已修复)。但它仍然没有达到理想的搜索行为。