elasticsearch获取分词结果

原创于 【模棱博客】

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 地址去具体查阅。

http://www.flammulina.com/2017/12/21/elasticsearch-%E8%8E%B7%E5%8F%96%E5%88%86%E8%AF%8D%E7%BB%93%E6%9E%9C/

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Elasticsearch 客户端在 Java 中连接到 Elasticsearch 服务器,然后使用 `Analyze API` 来获取分词后的结果。 首先,你需要在项目中添加 Elasticsearch 客户端的依赖,在 `pom.xml` 中加入如下内容: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.10.0</version> </dependency> ``` 然后,你可以连接到 Elasticsearch 服务器,并使用 `AnalyzeRequest` 对象调用 `analyze` 方法来获取分词后的结果: ```java import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.AnalyzeRequest; import org.elasticsearch.client.indices.AnalyzeResponse; // 创建 Elasticsearch 客户端 RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); // 创建分析请求对象 AnalyzeRequest request = new AnalyzeRequest(); request.text("这是一个要分词的句子"); // 设置分析器 request.analyzer("ik_smart"); // 执行分析请求 AnalyzeResponse response = client.indices().analyze(request); // 遍历分词结果 for (AnalyzeResponse.AnalyzeToken token : response.getTokens()) { System.out.println(token.getTerm()); } // 关闭客户端 client.close(); ``` 上面的代码中,我们使用了 `ik_smart` 分析器,这是一种中文分词器,你也可以使用其他分析器,比如英文分词器 `standard`。 注意,这里使用的是 Elasticsearch 7.x 版本的 API,如果你使用的是其他版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值