1:首先我们需要连接ElasticSearch客户端,需要一个连接操作: RestHighLevelClient
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
public class ESTest_Client {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
esClient. close ( ) ;
}
}
2:建立的客户端后,我们需要先进行索引的创建,查询,删除操作:
2.1:创建索引: CreateIndexRequest
响应: esClient.indices().create
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. client. indices. CreateIndexRequest ;
import org. elasticsearch. client. indices. CreateIndexResponse ;
public class ESTest_Index_Create {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
CreateIndexRequest request = new CreateIndexRequest ( "user" ) ;
CreateIndexResponse createIndexResponse =
esClient. indices ( ) . create ( request, RequestOptions . DEFAULT ) ;
boolean acknowledged = createIndexResponse. isAcknowledged ( ) ;
System . out. println ( "索引操作 :" + acknowledged) ;
esClient. close ( ) ;
}
}
2.2:查询索引: GetIndexRequest
响应: esClient.indices().get
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. client. indices. CreateIndexRequest ;
import org. elasticsearch. client. indices. CreateIndexResponse ;
import org. elasticsearch. client. indices. GetIndexRequest ;
import org. elasticsearch. client. indices. GetIndexResponse ;
public class ESTest_Index_Search {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
GetIndexRequest request = new GetIndexRequest ( "user" ) ;
GetIndexResponse getIndexResponse =
esClient. indices ( ) . get ( request, RequestOptions . DEFAULT ) ;
System . out. println ( getIndexResponse. getAliases ( ) ) ;
System . out. println ( getIndexResponse. getMappings ( ) ) ;
System . out. println ( getIndexResponse. getSettings ( ) ) ;
esClient. close ( ) ;
}
}
2.3:删除索引: DeleteIndexRequest
响应: esClient.indices().delete
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. admin. indices. delete. DeleteIndexRequest ;
import org. elasticsearch. action. support. master. AcknowledgedResponse ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. client. indices. GetIndexRequest ;
import org. elasticsearch. client. indices. GetIndexResponse ;
public class ESTest_Index_Delete {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
DeleteIndexRequest request = new DeleteIndexRequest ( "user" ) ;
AcknowledgedResponse response = esClient. indices ( ) . delete ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. isAcknowledged ( ) ) ;
esClient. close ( ) ;
}
}
3:索引创建好后我们需要将索引里面插入文档数据,包过数据的查询删除等等操作
3.1:将数据插入索引: IndexRequest
响应:esClient.index
3.1.1:首先建立一个实体类存放我们要插入的数据类:User
#3.1.2:然后向对应的索引中插入数据:这里的步骤分三步:
(1):new出索引,并指向我们要插入数据的索引: request.index("user").id("1001");
(2):将数据插入到实体类,并要穿换成json格式:
(3):默认响应:IndexResponse
:esClient.index
IndexResponse response = esClient. index ( request, RequestOptions . DEFAULT ) ;
package com. atguigu. es. test ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. index. IndexRequest ;
import org. elasticsearch. action. index. IndexResponse ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. client. indices. GetIndexRequest ;
import org. elasticsearch. client. indices. GetIndexResponse ;
import org. elasticsearch. common. xcontent. XContentType ;
public class ESTest_Doc_Insert {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
IndexRequest request = new IndexRequest ( ) ;
request. index ( "user" ) . id ( "1001" ) ;
User user = new User ( ) ;
user. setName ( "zhangsan" ) ;
user. setAge ( 30 ) ;
user. setSex ( "男" ) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
String userJson = mapper. writeValueAsString ( user) ;
request. source ( userJson, XContentType . JSON ) ;
IndexResponse response = esClient. index ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. getResult ( ) ) ;
esClient. close ( ) ;
}
}
3.2:修改索引中数据:UpdateRequest
响应: esClient.update
修改索引中的数据:跟上面类似,还是要先定位到哪个索引然后进行修改:
package com. atguigu. es. test ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. index. IndexRequest ;
import org. elasticsearch. action. index. IndexResponse ;
import org. elasticsearch. action. update. UpdateRequest ;
import org. elasticsearch. action. update. UpdateResponse ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. common. xcontent. XContentType ;
public class ESTest_Doc_Update {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
UpdateRequest request = new UpdateRequest ( ) ;
request. index ( "user" ) . id ( "1001" ) ;
request. doc ( XContentType . JSON , "sex" , "女" ) ;
UpdateResponse response = esClient. update ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. getResult ( ) ) ;
esClient. close ( ) ;
}
}
3.3:查询索引中的数据: GetRequest
响应: esClient.get
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. get. GetRequest ;
import org. elasticsearch. action. get. GetResponse ;
import org. elasticsearch. action. update. UpdateRequest ;
import org. elasticsearch. action. update. UpdateResponse ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. common. xcontent. XContentType ;
public class ESTest_Doc_Get {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
GetRequest request = new GetRequest ( ) ;
request. index ( "user" ) . id ( "1001" ) ;
GetResponse response = esClient. get ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. getSourceAsString ( ) ) ;
esClient. close ( ) ;
}
}
3.4:删除索引中的文档(数据): DeleteRequest
响应:esClient.delete
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. delete. DeleteRequest ;
import org. elasticsearch. action. delete. DeleteResponse ;
import org. elasticsearch. action. get. GetRequest ;
import org. elasticsearch. action. get. GetResponse ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
public class ESTest_Doc_Delete {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
DeleteRequest request = new DeleteRequest ( ) ;
request. index ( "user" ) . id ( "1001" ) ;
DeleteResponse response = esClient. delete ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. toString ( ) ) ;
esClient. close ( ) ;
}
}
3.5:批量插入数据: BulkRequest
响应: esClient.bulk
相当于就是在一个BulkRequest
里面包含很多IndexRequest().index
package com. atguigu. es. test ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. bulk. BulkRequest ;
import org. elasticsearch. action. bulk. BulkResponse ;
import org. elasticsearch. action. index. IndexRequest ;
import org. elasticsearch. action. index. IndexResponse ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. common. xcontent. XContentType ;
public class ESTest_Doc_Insert_Batch {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
BulkRequest request = new BulkRequest ( ) ;
request. add ( new IndexRequest ( ) . index ( "user" ) . id ( "1009" ) . source ( XContentType . JSON , "name" , "wangwu66666" , "age" , 60 , "sex" , "男" ) ) ;
BulkResponse response = esClient. bulk ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. getTook ( ) ) ;
System . out. println ( response. getItems ( ) ) ;
esClient. close ( ) ;
}
}
3.6:批量删除: BulkRequest
响应:esClient.bulk
,相当于一个 BulkRequest
里面包含很多DeleteRequest().index
package com. atguigu. es. test ;
import org. apache. http. HttpHost ;
import org. elasticsearch. action. bulk. BulkRequest ;
import org. elasticsearch. action. bulk. BulkResponse ;
import org. elasticsearch. action. delete. DeleteRequest ;
import org. elasticsearch. action. index. IndexRequest ;
import org. elasticsearch. client. RequestOptions ;
import org. elasticsearch. client. RestClient ;
import org. elasticsearch. client. RestHighLevelClient ;
import org. elasticsearch. common. xcontent. XContentType ;
public class ESTest_Doc_Delete_Batch {
public static void main ( String [ ] args) throws Exception {
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
BulkRequest request = new BulkRequest ( ) ;
request. add ( new DeleteRequest ( ) . index ( "user" ) . id ( "1001" ) ) ;
request. add ( new DeleteRequest ( ) . index ( "user" ) . id ( "1002" ) ) ;
request. add ( new DeleteRequest ( ) . index ( "user" ) . id ( "1003" ) ) ;
BulkResponse response = esClient. bulk ( request, RequestOptions . DEFAULT ) ;
System . out. println ( response. getTook ( ) ) ;
System . out. println ( response. getItems ( ) ) ;
esClient. close ( ) ;
}
}
3.7:全量查询:SearchRequest
响应:esClient.search
注意变化: request.indices("user");
RestHighLevelClient esClient = new RestHighLevelClient (
RestClient . builder ( new HttpHost ( "localhost" , 9200 , "http" ) )
) ;
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
request. source ( new SearchSourceBuilder ( ) . query ( QueryBuilders . matchAllQuery ( ) ) ) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.8:条件查询:与全量查询变化:QueryBuilders.termQuery("age", 30)
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
request. source ( new SearchSourceBuilder ( ) . query ( QueryBuilders . termQuery ( "age" , 30 ) ) ) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.9:分页查询 builder.from(2); builder.size(2);
3. 分页查询
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) . query ( QueryBuilders . matchAllQuery ( ) ) ;
builder. from ( 2 ) ;
builder. size ( 2 ) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.10:查询排序: builder.sort("age", SortOrder.DESC);
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) . query ( QueryBuilders . matchAllQuery ( ) ) ;
builder. sort ( "age" , SortOrder . DESC ) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.11:过滤字段 builder.fetchSource(includes, excludes);
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) . query ( QueryBuilders . matchAllQuery ( ) ) ;
String [ ] excludes = { "age" } ;
String [ ] includes = { } ;
builder. fetchSource ( includes, excludes) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.12:组合查询 :
// 6 . 组合查询
SearchRequest request = new SearchRequest( ) ;
request.indices( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder( ) ;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery( ) ;
//boolQueryBuilder.must( QueryBuilders.matchQuery( "age" , 30 )) ;
//boolQueryBuilder.must( QueryBuilders.matchQuery( "sex" , "男" )) ;
//boolQueryBuilder.mustNot( QueryBuilders.matchQuery( "sex" , "男" )) ;
boolQueryBuilder.should( QueryBuilders.matchQuery( "age" , 30 )) ;
boolQueryBuilder.should( QueryBuilders.matchQuery( "age" , 40 )) ;
builder.query( boolQueryBuilder) ;
request.source( builder) ;
SearchResponse response = esClient.search( request, RequestOptions.DEFAULT) ;
SearchHits hits = response.getHits( ) ;
System.out.println( hits.getTotalHits( )) ;
System.out.println( response.getTook( )) ;
for ( SearchHit hit : hits ) {
System.out.println( hit.getSourceAsString( )) ;
}
3.13:范围查询 : QueryBuilders.rangeQuery("age");
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) ;
RangeQueryBuilder rangeQuery = QueryBuilders . rangeQuery ( "age" ) ;
rangeQuery. gte ( 30 ) ;
rangeQuery. lt ( 50 ) ;
builder. query ( rangeQuery) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.14:模糊查询:QueryBuilders.fuzzyQuery("name","wangwu").fuzziness(Fuzziness.TWO)
Fuzziness.TWO:意思就是字符差两个就可以查出来,代表模糊的范围
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) ;
builder. query ( QueryBuilders . fuzzyQuery ( "name" , "wangwu" ) . fuzziness ( Fuzziness . TWO ) ) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.15:高亮查询:
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) ;
TermsQueryBuilder termsQueryBuilder = QueryBuilders . termsQuery ( "name" , "zhangsan" ) ;
HighlightBuilder highlightBuilder = new HighlightBuilder ( ) ;
highlightBuilder. preTags ( "<font color='red'>" ) ;
highlightBuilder. postTags ( "</font>" ) ;
highlightBuilder. field ( "name" ) ;
builder. highlighter ( highlightBuilder) ;
builder. query ( termsQueryBuilder) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.16:聚合查询:(求最大最小)对age字段取最大:maxAge
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) ;
AggregationBuilder aggregationBuilder = AggregationBuilders . max ( "maxAge" ) . field ( "age" ) ;
builder. aggregation ( aggregationBuilder) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}
3.17:分组查询 terms(“ageGroup”).field(“age”);: 根据年龄分组
SearchRequest request = new SearchRequest ( ) ;
request. indices ( "user" ) ;
SearchSourceBuilder builder = new SearchSourceBuilder ( ) ;
AggregationBuilder aggregationBuilder = AggregationBuilders . terms ( "ageGroup" ) . field ( "age" ) ;
builder. aggregation ( aggregationBuilder) ;
request. source ( builder) ;
SearchResponse response = esClient. search ( request, RequestOptions . DEFAULT ) ;
SearchHits hits = response. getHits ( ) ;
System . out. println ( hits. getTotalHits ( ) ) ;
System . out. println ( response. getTook ( ) ) ;
for ( SearchHit hit : hits ) {
System . out. println ( hit. getSourceAsString ( ) ) ;
}