spring boot 集成 ES +ik分词器
es+ik
·
1.TransportClient
<!--es-->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
public interface *****Respository extends ElasticsearchRepository<*****Vo, String> {
}
Repository接口的自动实现,包括对自定义查找器方法的支持。
2.RestClient
<!--es-->
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-elasticsearch -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.8.10</version>
</dependency>
@Configuration
public class ElasticsearchConf extends AbstractElasticsearchConfiguration {
@Value("${es.endpoints}")
String esIp;
@Override
public RestHighLevelClient elasticsearchClient() {
return RestClients.create(ClientConfiguration.create(esIp)).rest();
}
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
}
es:
endpoints: 192.168.1.12:9200
@AllArgsConstructor
@NoArgsConstructor
@Data
//@JsonInclude(JsonInclude.Include.NON_NULL)
@Document(indexName = "new_indexName")
public class TestDto {
@ApiModelProperty(value = "采集地址")
@Field(type = FieldType.Keyword,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String collectionAddr;
}
因为我用的是docker所以只做了docker相关笔记
- 进入docker 容器
docker exec -it a70fda65d2ba /bin/bash
- 安装es对应分词器版本(找了半天对应的版本)
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.10/elasticsearch-analysis-ik-6.8.10.zip
分词器及相关下载
https://elasticsearch.cn/download/
- 查看安装的分词器
- 退出/重启
exit
docker restart elasticsearch
5.分词查询
@GetMapping("/ik")
@ApiImplicitParam(name = "addr",value = "分词查询条件", paramType = "query", dataType = "String")
public Page<TestDto> getAddr(String addr){
//使用dis_max直接取多个query中,分数最高的那一个query的分数即可
DisMaxQueryBuilder disMaxQueryBuilder = QueryBuilders.disMaxQuery();
BoolQueryBuilder query = QueryBuilders.boolQuery().
must(QueryBuilders.matchQuery("collectionAddr", addr).analyzer("ik_max_word"));
NativeSearchQuery build = new NativeSearchQueryBuilder()
.withQuery(query)
.build();
return testSaveEs.search(build);
6.如果需要分页
//指定查询数据的分页数和按照时间进行排序
Pageable pageable = PageRequest.of(pageindex, pagesize, Sort.Direction.ASC, "dateTime");
//分页
return testSaveEs.search(build,pageable);
更多推荐
已为社区贡献1条内容
所有评论(0)