es拼音分词 大帅哥_elasticsearch实现中文分词和拼音分词混合查询+CompletionSuggestion...

引言

之前已经介绍了如何搭建elasticsearch服务端和简单的索引创建,和中文分词的支持。今天我们来说一说如何实现elasticsearch同时实现中文分词和pinyin分词。并且实现类似百度搜索栏的搜索建议的功能。

混合查询

实现混合查询有很多方式,这里介绍我认为是一个偷懒的方法,就是为你要拼音搜索的字段提供两个额外的字段,一个是全拼字段,一个是首字母缩写字段。我这里用的是官网的Employee的例子:

public class Employee implements Serializable {

private String firstName;

private String lastName;

private String pinyin;//firstName全拼

private String header;//firstName首字母缩写

private int age;

private String about;

private List interests;

....省略getter setter

接下来为index添加setting和mapping

XContentBuilder settings = XContentFactory.jsonBuilder();

settings.startObject()

.startObject("analysis")

.startObject("analyzer")

.startObject("ik_analyzer").field("tokenizer","ik_smart")

.endObject()

.endObject()

.endObject().endObject();

CreateIndexRequest createIndexRequest = new CreateIndexRequest(index).settings(settings);

CreateIndexResponse createIndexResponse = esClient.admin().indices().create(createIndexRequest).get();

logger.info("Index:{} created,response:{}", index, JSON.toJSON(createIndexResponse));

XContentBuilder builder = XContentFactory.jsonBuilder();

builder.startObject()

.startObject(type)

.startObject("properties")

.startObject("firstName").field("type", "string").field("analyzer","ik_smart")

/* .field("search_analyzer","ik_smart").field("preserve_separators",false) .field("preserve_position_increments",false)*/

.endObject()

.startObject("lastName").field("type"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值