package org.springblade.es.test; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.refresh.RefreshRequest; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import java.io.IOException; import java.util.Map; public class ElasticSearchExample { public static void main(String[] args) throws IOException { // 初始化Elasticsearch客户端 RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http")); RestHighLevelClient client = new RestHighLevelClient(builder); // 索引用户数据 IndexRequest userIndexRequest = new IndexRequest("users_articles"); userIndexRequest.source("name", "John Doe", "type", "user"); IndexResponse userIndexResponse = client.index(userIndexRequest, RequestOptions.DEFAULT); // 索引文章数据 IndexRequest articleIndexRequest = new IndexRequest("users_articles"); articleIndexRequest.source("title", "Elasticsearch Introduction", "type", "article"); IndexResponse articleIndexResponse = client.index(articleIndexRequest, RequestOptions.DEFAULT); // 刷新索引,确保文档可搜索 client.indices().refresh(new RefreshRequest("users_articles"), RequestOptions.DEFAULT); // 全文搜索 SearchRequest searchRequest = new SearchRequest("users_articles"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.multiMatchQuery("Elasticsearch", "name", "title")); //设置分页 searchSourceBuilder.size(10); searchSourceBuilder.from(0); //将搜索资源对象设置到搜索客户端中 searchRequest.source(searchSourceBuilder); //查询 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); //解析搜索返回值 SearchHits searchHits = searchResponse.getHits(); //查询的总数 long count = searchHits.getTotalHits().value; for (SearchHit hit : searchHits) { Map result = hit.getSourceAsMap(); // 根据类型处理结果 String type = (String) result.get("type"); if ("user".equals(type)) { // 处理用户名 String name = (String) result.get("name"); System.out.println("User: " + name); } else if ("article".equals(type)) { // 处理文章标题 String title = (String) result.get("title"); System.out.println("Article: " + title); } } // 关闭客户端 client.close(); } /** * 设置高亮 * @param keywords * @param info * @return */ public static String setHighLight(String keywords, String info) { if (StringUtils.isBlank(keywords)|| StringUtils.isBlank(info)) { return info; } String[] keywordArray = keywords.split(" "); String newInfo = info; for (String keyword : keywordArray) { newInfo = newInfo.replace(keyword, "" + keyword + ""); } return newInfo; } }