方式一:
1、pom文件依赖
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.8.15</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.8.15</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.9.0</version> </dependency>
2、application.yml 配置
#查询配置 snat-es-config: indexes: sq_* esIp: 127.0.0.1 esPort: 9200 username: admin password: admin
3、获取配置文件的config的信息
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @Description: 查询配置文件
* @Author: liujian
* @Version: 1.0
* @Create Date Time: 2021-12-03 17:32
* @Update Date Time: 2021-12-03 17:32
* @see
*/
@Configuration
@Data
@ConfigurationProperties(prefix = "snat-es-config")
public class SnatConfig {
/**
* es库索引前缀
*/
private String indexes;
/**
* esIP
*/
private String esIp;
/**
* esPort
*/
private int esPort;
/**
* userName
*/
private String userName;
/**
* password
*/
private String passWord;
}
4、构建Client
/**
* 构建Client
*
* @return RestHighLevelClient client
*/
public RestHighLevelClient getClient() {
RestHighLevelClient client = null;
String userName = snatConfig.getUserName();
String userPwd = snatConfig.getPassWord();
String ip = snatConfig.getEsIp();
int port = snatConfig.getEsPort();
try {
/** 用户认证对象 */
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
/** 设置账号密码 */
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(userName, userPwd));
/** 创建rest client对象 */
RestClientBuilder builder = RestClient.builder(new HttpHost(ip, port))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
client = new RestHighLevelClient(builder);
} catch (Exception e) {
e.printStackTrace();
}
return client;
}
5、实现查询业务
@Test
public void getSnatDataTest01() throws IOException {
RestHighLevelClient client = getClient();
// 根据索引创建查询请求
SearchRequest searchRequest = new SearchRequest("sq_*");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 构建查询语句 可以写多个参数
searchSourceBuilder.query(QueryBuilders.queryStringQuery("127.0.0.1"))
.sort("timestamp", SortOrder.fromString("desc"));
System.out.println("searchSourceBuilder =" + searchSourceBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
//将数据打印出来
System.out.println(JSONObject.toJSON(hits));
}
6、可能出现的异常
java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS 说明你的pom依赖是 7版本的(依赖版本不对)
方式二:
前提:代码中存在通过HTTP请求的工具,可以直接通过API调用es库来获取数据
@Test
public void getSnatDataTest02() throws IOException {
String sandforadBody = "{\n" +
" \"from\": 0,\n" +
" \"size\": 150,\n" +
" \"query\": {\n" +
" \"bool\": {\n" +
" \"must\": [\n" +
" {\n" +
" \"query_string\": {\n" +
" \"query\": \"10.42.141.32\",\n" +
" \"fields\": [],\n" +
" \"use_dis_max\": true,\n" +
" \"tie_breaker\": 0,\n" +
" \"default_operator\": \"or\",\n" +
" \"auto_generate_phrase_queries\": false,\n" +
" \"max_determinized_states\": 10000,\n" +
" \"allow_leading_wildcard\": true,\n" +
" \"enable_position_increments\": true,\n" +
" \"fuzziness\": \"AUTO\",\n" +
" \"fuzzy_prefix_length\": 0,\n" +
" \"fuzzy_max_expansions\": 50,\n" +
" \"phrase_slop\": 0,\n" +
" \"escape\": false,\n" +
" \"split_on_whitespace\": true,\n" +
" \"boost\": 1\n" +
" }\n" +
" }\n" +
" ],\n" +
" \"filter\": [\n" +
" {\n" +
" \"bool\": {\n" +
" \"must\": [\n" +
" {\n" +
" \"range\": {\n" +
" \"timestamp\": {\n" +
" \"from\": \"1970-01-01 00:00:00.000\",\n" +
" \"to\": \"2022-04-27 08:36:36.120\",\n" +
" \"include_lower\": true,\n" +
" \"include_upper\": true,\n" +
" \"boost\": 1\n" +
" }\n" +
" }\n" +
" }\n" +
" ],\n" +
" \"should\": [\n" +
" {\n" +
" \"query_string\": {\n" +
" \"query\": \"streams:5e8456c8df8b291d662c4638\",\n" +
" \"fields\": [],\n" +
" \"use_dis_max\": true,\n" +
" \"tie_breaker\": 0,\n" +
" \"default_operator\": \"or\",\n" +
" \"auto_generate_phrase_queries\": false,\n" +
" \"max_determinized_states\": 10000,\n" +
" \"enable_position_increments\": true,\n" +
" \"fuzziness\": \"AUTO\",\n" +
" \"fuzzy_prefix_length\": 0,\n" +
" \"fuzzy_max_expansions\": 50,\n" +
" \"phrase_slop\": 0,\n" +
" \"escape\": false,\n" +
" \"split_on_whitespace\": true,\n" +
" \"boost\": 1\n" +
" }\n" +
" }\n" +
" ],\n" +
" \"disable_coord\": false,\n" +
" \"adjust_pure_negative\": true,\n" +
" \"boost\": 1\n" +
" }\n" +
" }\n" +
" ],\n" +
" \"disable_coord\": false,\n" +
" \"adjust_pure_negative\": true,\n" +
" \"boost\": 1\n" +
" }\n" +
" },\n" +
" \"sort\": [\n" +
" {\n" +
" \"timestamp\": {\n" +
" \"order\": \"desc\"\n" +
" }\n" +
" }\n" +
" ],\n" +
" \"highlight\": {\n" +
" \"fragment_size\": 0,\n" +
" \"number_of_fragments\": 0,\n" +
" \"require_field_match\": false,\n" +
" \"fields\": {\n" +
" \"*\": {}\n" +
" }\n" +
" }\n" +
"}";
String url = "http://192.168.113.99:9200/sq_*/_search";
//初始化
HttpRequest sandforadHttpRequest = HttpRequestImpl.getInstance();
HttpRequestBodyBuilder bodyBuilder = HttpRequestBodyBuilderImpl.getInstance();
final RequestBody requestBody = bodyBuilder.json(sandforadBody);
Response post = sandforadHttpRequest.post(url, requestBody);
String stringPost = post.body().string();
System.out.println(stringPost);
}
10万+

被折叠的 条评论
为什么被折叠?



