如何在spring-data-elasticsearch中使用Analyze API发起分词请求?
调用Elasticsearch _analyze接口的三种可行方案
方案1:使用Spring Data Elasticsearch原生封装API(最推荐)
不需要依赖ES官方客户端的原生类,完全贴合Spring Data的使用规范:
// 若使用全局分析器,不需要绑定具体索引,可传入空索引名 IndexOperations indexOps = elasticsearchRestTemplate.indexOps(IndexCoordinates.of("")); // 传入待分词内容和指定的分析器名称 List<AnalyzeToken> tokens = indexOps.analyze(new AnalyzeQuery(payload, "stop"));
返回结果直接是已经解析好的分词Token列表,包含分词内容、偏移量、位置等信息。
方案2:直接使用RestHighLevelClient原生API
你构建的AnalyzeRequest本身就是ES官方Java客户端的原生请求类,不需要手动转换为低级别Request对象,直接调用对应方法即可:
// 1. 构建分析请求 AnalyzeRequest analyzeRequest = AnalyzeRequest.withGlobalAnalyzer("stop", payload); // 2. 直接通过RestHighLevelClient的索引管理客户端发起调用 AnalyzeResponse response = restHighLevelClient.indices().analyze(analyzeRequest, RequestOptions.DEFAULT); // 3. 读取分词结果 List<AnalyzeResponse.AnalyzeToken> tokens = response.getTokens();
方案3:使用转换后的低级别Request发起调用
如果确实需要使用你已经转换好的低级别Request对象,可以通过RestHighLevelClient内置的低级别RestClient执行请求:
// 你已经完成的Request构建逻辑 AnalyzeRequest analyzeRequest = AnalyzeRequest.withGlobalAnalyzer("stop", payload); Request request = RequestConverters.analyze(analyzeRequest); // 1. 获取低级别RestClient实例 Response response = restHighLevelClient.getLowLevelClient().performRequest(request); // 2. 自行解析响应内容 String responseBody = EntityUtils.toString(response.getEntity()); // 可根据需要将响应JSON反序列化为对应对象处理
注意:该方案需要自行处理异常捕获、响应解析,仅适合需要自定义请求逻辑的场景,日常使用优先选择前两种方案。
内容的提问来源于stack exchange,提问作者Hari Rao
相关产品推荐
相关产品推荐

