原创于 【模棱博客】
ES 中默认配置 IK 后,通过 Rest HTTP 的方式我们可以进行得到分词结果。
那么在 Spring Boot 和提供的客户端依赖 spring-data-elasticsearch 中如何获取到分词结果。
加入依赖 pom.xml
org.springframework.boot
spring-boot-starter-data-elasticsearch
在 application.properties 配置 ES 的地址:
# ES spring.data.elasticsearch.repositories.enabled = true spring.data.elasticsearch.cluster-nodes = 127.0.0.1:9300
然后创建一个方法,入参是搜索词,返回的是分词结果列表。
@Autowired private ElasticsearchTemplate elasticsearchTemplate; /** * 调用 ES 获取 IK 分词后结果 * * @param searchContent * @return */ private List getIkAnalyzeSearchTerms(String searchContent) { // 调用 IK 分词分词 AnalyzeRequestBuilder ikRequest = new AnalyzeRequestBuilder(elasticsearchTemplate.getClient(), AnalyzeAction.INSTANCE,"indexName",searchContent); ikRequest.setTokenizer("ik"); List ikTokenList = ikRequest.execute().actionGet().getTokens(); // 循环赋值 List searchTermList = new ArrayList<>(); ikTokenList.forEach(ikToken -> { searchTermList.add(ikToken.getTerm()); }); return searchTermList; }
indexName 这里是指在 ES 设置的索引名称。
从容器注入的 ElasticsearchTemplate Bean 中获取 Client ,再通过 AnalyzeRequestBuilder 分析请求类型中进行分词并获取分词结果 AnalyzeResponse.AnalyzeToken 列表。
小结
默认配置了 IK 分词器,则 DSL 去 ES 查询时会自动调用 IK 分词。
如果想要自定义词库,比如比较偏的领域性。可以参考 Elasticsearch-analysis-ik GiHub 地址去具体查阅。