版本
SpringBoot == 3.0
Elasticsearch == 8.12.1
依賴
我使用的
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
還可以用,但我沒用的。1,2一起用會報下面第一個錯
<dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.12.1</version>
</dependency>
注意:elasticsearch7.17版本之前使用的是,現在已經被棄用
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.18</version>
</dependency>
資料
之前看的elasticsearch7.17之前如何做的:鏈接
elasticsearch7.17以上的代碼示例:鏈接
官方文檔:鏈接
一個介紹:鏈接
報錯
?錯誤1:Correct the classpath of your application so that it contains compatible versions of the classes org
我的解決方法就是只用第一個依賴
錯誤2:Error deserializing co.elastic.clients.elasticsearch.core.search.Hit: jakarta.json.JsonException: Ja?
解決方法
其他?
貼一個,elasticsearch7.17之前的配置,但最好還是用最新的方法
@Data
@Configuration
@ConfigurationProperties(prefix = "es")
public class ESConfig {private String esUrl;private String esUsername;private String esPassword;@Beanpublic RestHighLevelClient configRestHighLevelClient() throws Exception {String[] esUrlArr = esUrl.split(",");List<HttpHost> httpHosts = new ArrayList<>();for(String es : esUrlArr){String[] esUrlPort = es.split(":");httpHosts.add(new HttpHost(esUrlPort[0], Integer.parseInt(esUrlPort[1]), "http"));}final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(esUsername, esPassword));RestClientBuilder builder = RestClient.builder(httpHosts.toArray(new HttpHost[0])).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));System.out.println("ES配置完成");return new RestHighLevelClient(builder);}
}
@org.junit.Testpublic void getDocument() throws Exception {try (RestHighLevelClient client = new ESConfig().configRestHighLevelClient()) {// 指定要搜索的索引名稱String indexName = "cartoon_reply_info";// 創建搜索請求對象SearchRequest searchRequest = new SearchRequest(indexName);// 創建搜索請求的查詢條件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchQuery("content", "世界"));searchSourceBuilder.query(QueryBuilders.matchAllQuery()); // 匹配所有文檔searchSourceBuilder.size(10); // 設置返回結果的數量searchSourceBuilder.sort("mediaId", SortOrder.DESC); // 根據字段排序searchSourceBuilder.highlighter(new HighlightBuilder().field("世界")); // 設置高亮字段searchSourceBuilder.size(10);// 將查詢條件添加到搜索請求中searchRequest.source(searchSourceBuilder);// 執行搜索請求SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 處理搜索結果// 您可以從 searchResponse 中獲取搜索結果并進行進一步的處理// 示例中省略了處理過程for (SearchHit hit : searchResponse.getHits().getHits()) {System.out.println(hit.getSourceAsString()); // 輸出文檔內容}} catch (IOException e) {e.printStackTrace();}}