java客户端操作ES
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.8.0</version>
</dependency>
public class TestDocument {
private TransportClient transportClient;
@Before
public void before() throws UnknownHostException {
//创建客户端
this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
//设置操作es的主机和端口
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.149.129"),9300));
}
@After
public void after(){
transportClient.close();
}
//添加文档
@Test
public void testCreate(){
User user=new User("1","小红",23,new Date(),"我们在疫情下努力学习","上海");
//转为json
String json = JSONObject.toJSONString(user);
IndexResponse indexResponse = transportClient.prepareIndex("ems", "emp", user.getId()).setSource(json, XContentType.JSON).get();
System.out.println("indexResponse = " + indexResponse.status());
}
//添加文档(自动id)
@Test
public void testCreateAutoId(){
User user=new User(null,"小羊",28,new Date(),"我们在疫情下好好听课","南京");
//转为json
String json = JSONObject.toJSONString(user);
IndexResponse indexResponse = transportClient.prepareIndex("ems", "emp").setSource(json, XContentType.JSON).get();
System.out.println("indexResponse = " + indexResponse.status());
}
//更新文档
@Test
public void testUpdate(){
User user = new User();
user.setContent("我们在疫情下学习框架");
user.setBir(new Date());
//转为json
String json = JSONObject.toJSONStringWithDateFormat(user,"yyyy-MM-dd");
UpdateResponse updateResponse = transportClient.prepareUpdate("ems", "emp", "1").setDoc(json, XContentType.JSON).get();
System.out.println("indexResponse = " + updateResponse.status());
}
}
//删除文档
@Test
public void testDelete(){
DeleteResponse deleteResponse = transportClient.prepareDelete("ems", "emp", "YiJTXnQBEtzuYn29C38i").get();
System.out.println("deleteResponse = " + deleteResponse.status());
}
//查询一条文档
@Test
public void testFindOne() throws ParseException {
GetResponse getResponse = transportClient.prepareGet("ems", "emp", "1").get();
System.out.println("deleteResponse = " + getResponse.getSourceAsString());
Map<String,Object> sourceAsMap = getResponse.getSourceAsMap();
User user = new User();
user.setId(sourceAsMap.get("id").toString());
user.setBir(new SimpleDateFormat("yyyy-MM-dd").parse(sourceAsMap.get("bir").toString()));
System.out.println("user = " + user);
}
}
//各种查询,查询所有
@Test
public void testSearch(){
//查询条件
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
SearchResponse searchResponse = transportClient.prepareSearch("ems")
.setTypes("emp") // 指定类型
.setQuery(matchAllQueryBuilder) //指定查询条件
.get();//执行查询
System.out.println("总条数"+searchResponse.getHits().getTotalHits());
System.out.println("最大得分"+searchResponse.getHits().getMaxScore());
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
System.out.println("hit = " + hit.getSourceAsString());
}
}
//termQuery
@Test
public void testQuery(){
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("content", "框架");
SearchResponse searchResponse = transportClient.prepareSearch("ems")
.setTypes("emp")
.setQuery(termQueryBuilder)
.get();
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
System.out.println("hit = " + hit);
}
}
//批量操作
@Test
public void testBulk(){
User user = new User("12","张三丰",23,new Date(),"太极拳创始人","武当山");
//添加
IndexRequest indexRequest = new IndexRequest("ems","emp",user.getId()).source(JSONObject.toJSONStringWithDateFormat(user,"yyyy-MM-dd"),XContentType.JSON);
//删除
DeleteRequest deleteRequest = new DeleteRequest("ems","emp","YSJSXnQBEtzuYn29oH92");
//修改
User user1 = new User();
user1.setContent("这是一个修改后的spring框架");
UpdateRequest updateRequest = new UpdateRequest("ems","emp","YyJTXnQBEtzuYn29Vn9m").doc(JSONObject.toJSONString(user1),XContentType.JSON);
//返回批量更新对象
BulkRequestBuilder bulkRequestBuilder = transportClient.prepareBulk();
BulkResponse bulkItemResponses = bulkRequestBuilder.add(indexRequest).add(deleteRequest).add(updateRequest).get();
for (BulkItemResponse bulkItemRespons : bulkItemResponses) {
System.out.println("bulkItemRespons = " + bulkItemRespons.status());
}
}
}
Query
public class TestDocument {
private TransportClient transportClient;
@Before
public void before() throws UnknownHostException {
//创建客户端
this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
//设置操作es的主机和端口
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.149.129"),9300));
}
@After
public void after(){
transportClient.close();
}
@Test
public void testQuery(){
//查询所有
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
//termQuery
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("content","太极");
//rangeQuery
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(0).lte(25);
//wildcardQuery 通配符
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("content", "框?");
//prefixQuery前缀查询
PrefixQueryBuilder prefixQueryBuilder = QueryBuilders.prefixQuery("content", "框");
//ids 查询
IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery().addIds("12").addIds("YyJTXnQBEtzuYn29Vn9m");
//fuzz模糊查询
FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("content", "框架");
//bool query
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("content", "spring"));
//调用方法
testResult(idsQueryBuilder);
}
//用来输出搜索结果
public void testResult(QueryBuilder queryBuilder){
SearchResponse searchResponse = transportClient.prepareSearch("ems")
.setTypes("emp")
.setQuery(queryBuilder)
.setFrom(0) //起始条数
.setSize(20) //设置每页展示条数
// .setSource(SearchSourceBuilder.searchSource().fetchSource("*","age")) 执行结果中返回哪些字段
.addSort("age", SortOrder.DESC) //设置降序排序,asc为升序
.get();
System.out.println("总条数"+searchResponse.getHits().getTotalHits());
System.out.println("最大得分"+searchResponse.getHits().getMaxScore());
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
System.out.println("hit = " + hit);
}
}
}
高亮查询
public class TestDocumentHight {
private TransportClient transportClient;
@Before
public void before() throws UnknownHostException {
//创建客户端
this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
//设置操作es的主机和端口
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.149.129"),9300));
}
@After
public void after(){
transportClient.close();
}
/**
* 高亮查询
*/
@Test
public void testQuery(){
List<User> users = new ArrayList<>();
//创建highlightBuilder
HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false)
.preTags("<span style='color:red;'>")
.postTags("</span>");
SearchResponse searchResponse = transportClient.prepareSearch("ems")
.setTypes("emp")
.setQuery(QueryBuilders.multiMatchQuery("框架","name","content"))
.highlighter(highlightBuilder)//高亮处理
.get();
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
User user = new User();
//原始数据封装
Map<String,Object> sourceAsMap = hit.getSourceAsMap();
user.setId(hit.getId());
user.setName(sourceAsMap.get("name").toString());
user.setName(sourceAsMap.get("name").toString());
user.setAge(Integer.valueOf(sourceAsMap.get("age").toString()));
try {
user.setBir(new SimpleDateFormat("yyyy-MM-dd").parse(sourceAsMap.get("bir").toString()));
} catch (ParseException e) {
e.printStackTrace();
}
user.setContent(sourceAsMap.get("content").toString());
user.setAddress(sourceAsMap.get("address").toString());
//高亮处理
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
if(highlightFields.containsKey("name")){
user.setName(highlightFields.get("name").fragments()[0].toString());
}
if(highlightFields.containsKey("content")){
user.setContent(highlightFields.get("content").fragments()[0].toString());
}
users.add(user);
}
users.forEach(user -> System.out.println("user = " + user));
}
}
过滤查询
/**
* 过滤查询
*/
@Test
public void testQuery() {
SearchResponse searchResponse = transportClient.prepareSearch("ems")
.setTypes("emp")
.setPostFilter(QueryBuilders.rangeQuery("age").gte(0).lte(25))
.setQuery(QueryBuilders.matchAllQuery())
.get();
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
System.out.println("hit = " + hit);
}
}