es拼音分词 大帅哥_SpringBoot集成Elasticsearch 进阶,实现中文、拼音分词,繁简体转换...

本文介绍了如何在SpringBoot中集成Elasticsearch,实现读时和写时分词,特别是针对中文、拼音和繁简体转换的分词处理。文章详细讲解了分词器的概念,包括Standard、ik_max_word等分词器,以及elasticsearch-analysis-ik、elasticsearch-analysis-pinyin和elasticsearch-analysis-stconvert等中文分词插件的使用。并提供了一个基于Docker的Elasticsearch镜像,包含了这些插件。接着,文章展示了如何配置实体Mapping,使用@Mapping和@Setting注解,以及如何通过SearchQuery和HighlightBuilder实现高亮显示和拼音搜索。最后,文章给出了一个接口用于查看搜索内容的分词结果,证明分词器已生效。
摘要由CSDN通过智能技术生成

Elasticsearch 分词

分词分为读时分词和写时分词。

读时分词发生在用户查询时,ES 会即时地对用户输入的关键词进行分词,分词结果只存在内存中,当查询结束时,分词结果也会随即消失。而写时分词发生在文档写入时,ES 会对文档进行分词后,将结果存入倒排索引,该部分最终会以文件的形式存储于磁盘上,不会因查询结束或者 ES 重启而丢失。

写时分词器需要在 mapping 中指定,而且一经指定就不能再修改,若要修改必须新建索引。

分词一般在ES中有分词器处理。英文为Analyzer,它决定了分词的规则,Es默认自带了很多分词器,如:

Standard、english、Keyword、Whitespace等等。默认的分词器为Standard,通过它们各自的功能可组合

成你想要的分词规则。分词器具体详情可查看官网:分词器

另外,在常用的中文分词器、拼音分词器、繁简体转换插件。国内用的就多的分别是:

elasticsearch-analysis-ik

elasticsearch-analysis-pinyin

elasticsearch-analysis-stconvert

可在以上链接找到自己对于的elasticsearch版本安装插件。

这里提供一个我自己封装的elasticsearch 5.5.0 的Docker镜像,里面在官方镜像的基础上加入了以上三个个插件,链接:

liaodashuai/elasticsearch:1.0.2

简单了解至此,下面用SpringBoot 集成

实现效果:

打造匹配搜索和高亮搜索API

使用中文、拼音和繁简体都能搜索到

扩展另外众多的搜索方式,简单使用测试用例实现

集成SpringBoot 实现高亮显示、拼音搜索

导入jar包,springboot 2.0.4只支持5.X版本的Es,注意版本对应,避免坑。

compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-elasticsearch', version: '2.0.6.RELEASE'

compile 'org.elasticsearch.client:x-pack-transport:5.5.0'

配置连接Es

@Configuration

public class EsConfiguration {

private Client esClient;

/**

* Transport client transport client.

* 如果配置X-PACK ,则需要在此处配置用户信息

*

* @return the transport client

*/

@Bean

public Client transportClient() {

TransportClient client = null;

try {

client = new PreBuiltXPackTransportClient(Settings.builder()

//嗅探集群状态

// .put("client.transport.sniff", true)

.put("cluster.name", "docker-cluster")

//如果有配置xpack插件,需要配置登录

.put("xpack.security.user", "elastic:changeme")

.build())

.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("120.79.58.138"), 9300));

} catch (UnknownHostException e) {

log.error("elasticsearch 连接失败 !");

}

return client;

}

/**

* 避免TransportClient每次使用创建和释放

*/

public Client esTemplate() {

if (StringUtils.isEmpty(esClient) || StringUtils.isEmpty(esClient.admin())) {

esClient = transportClient();

return esClient;

}

return esClient;

}

}

配置实体Mapping

@Document(indexName = "film-entity", type = "film")

@Setting(settingPath = "/json/film-setting.json")

@Mapping(mappingPath = "/json/film-mapping.json")

public class FilmEntity {

@Id

private Long id;

// @Field(type = FieldType.Text, searchAnalyzer = "ik_max_word", analyzer = "ik_smart"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值