es前缀查询java 前缀_ES搜索——全拼&首拼前缀匹配mapping设计

本文介绍了如何在Elasticsearch中设计全拼和首拼音的mapping,以实现前缀查询。通过创建索引并配置特定的分析器,包括全拼分词和首拼分词的详细参数设置,确保了前缀匹配的准确性和大小写的适配性。
摘要由CSDN通过智能技术生成

1、创建索引,并设计mapping

全拼和首拼需要分两个字段。一开始想要用一个字段解决,结果怎么弄都无法满足需求。

PUT aikg_test

{

"mappings": {

"properties": {

"name": {

"type": "keyword",

"fields": {

"full_pinyin": {

"type": "text",

"store": false,

"term_vector": "with_offsets",

"analyzer": "full_pinyin_analyzer",

"boost": 10

},

"first_pinyin": {

"type": "text",

"store": false,

"term_vector": "with_offsets",

"analyzer": "first_pinyin_analyzer",

"boost": 10

}

}

}

}

},

"settings": {

"analysis": {

"analyzer": {

"first_pinyin_analyzer": {

"tokenizer": "first_pinyin_letter"

},

"full_pinyin_analyzer": {

"tokenizer": "full_pinyin_letter"

}

},

"tokenizer": {

"first_pinyin_letter": {

"type": "pinyin",

"keep_first_letter": true,

"keep_full_pinyin": false,

"keep_none_chinese": false,

"keep_none_chinese_in_first_letter": true,

"none_chinese_pinyin_tokenize": false

},

"full_pinyin_letter": {

"type": "pinyin",

"keep_first_letter": false,

"keep_full_pinyin": false,

"keep_none_chinese": true,

"keep_none_chinese_in_first_letter": false,

"none_chinese_pinyin_tokenize": false,

"keep_joined_full_pinyin": true,

"keep_none_chinese_in_joined_full_pinyin": true

}

}

}

}

}

2、分词例子

2.1、全拼分词

具体参数设置:

"full_pinyin_letter": {

"type": "pinyin",

"keep_first_letter": false,

"keep_full_pinyin": false,

"keep_none_chinese": true,

"keep_none_chinese_in_first_letter": false,

"none_chinese_pinyin_tokenize": false,

"keep_joined_full_pinyin": true,

"keep_none_chinese_in_joined_full_pinyin": true

}

分词:

GET aikg_test/_analyze

{

"text": ["刘德华at2016"],

"analyzer": "full_pinyin_analyzer"

}

分词结果:

59164efa431c

image.png

关键参数:"keep_joined_full_pinyin": true 和 "keep_none_chinese_in_joined_full_pinyin": true,前者保证汉字全拼连接在一起,后者保证汉字全拼和其他字符连在一起。注意参数:"keep_full_pinyin": false。

2.2、首拼分词

具体参数设置:

"first_pinyin_letter": {

"type": "pinyin",

"keep_first_letter": true,

"keep_full_pinyin": false,

"keep_none_chinese": true,

"keep_none_chinese_in_first_letter": true,

"none_chinese_pinyin_tokenize": false

}

分词:

GET aikg_test/_analyze

{

"text": ["刘德华at2016"],

"analyzer": "first_pinyin_analyzer"

}

分词结果:

59164efa431c

image.png

关键参数:"keep_none_chinese": false,如果该值设置为 true,“刘德华at2016”会拆分为两个词,其中非中文会分成一个词。这种情况下输入 at 前缀匹配,会查询到该词,而实际上该词并不是以 at 开头。分词结果如下图:

59164efa431c

image.png

当设置参数"keep_none_chinese_in_first_letter": true,就会把汉字首拼和其他字符连接在一起。

3、大小写问题

当参数为大写“LDH”时,无法匹配到刘德华。解决方法很简单,在程序里把参数统一转为小写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值