前言
本章讲解使用Java的API操作ElasticSearch
方法
1.概念
和Solr一样,我们的ES也是支持了多种语言对其进行操作。其中Java的操作是我们所关心的。
2.使用Java操作ES
特别的:我们本次只关注其查询操作
1)引入必要的jar包
要注意,我们需要使用和ES相同版本的jar包才行,否则可能会发生未知的异常。
2)开启ES
使用之前的方法将ES开启,此处不再多说。
3)编写测试代码进行测试
@Test
public void testES02() throws Exception{
SearchRequest searchRequest = new SearchRequest("test01");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//关键字匹配
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("username","祖国");
//模糊匹配
matchQueryBuilder.fuzziness(Fuzziness.AUTO);
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = highClient.search(searchRequest,RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
System.out.println(hit.getSourceAsString());
}
}
运行结果如下:
可以发现,我们成功的完成了相关的查询。
4)使用JSON将结果处理为对象
添加JSON处理包:
测试类进行如下修改:
@Test
public void testES02() throws Exception{
SearchRequest searchRequest = new SearchRequest("test01");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//关键字匹配
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("username","祖国");
//模糊匹配
matchQueryBuilder.fuzziness(Fuzziness.AUTO);
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = highClient.search(searchRequest,RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
System.out.println(hit.getSourceAsString());
JSONObject jsonObject = JSONObject.fromObject(hit.getSourceAsString());
String[] dateFormats = new String[] {"yyyy/MM/dd"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
User user = (User)JSONObject.toBean(jsonObject,User.class);
System.out.println(user);
}
}
查询结果如下:
附录:整体测试代码
import cn.edu.ccut.bo.User;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.*;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @Auther:jwang
* @Date:2019/2/11
* @Description:PACKAGE_NAME
* @Version 1.0
**/
public class ESTest {
private RestHighLevelClient highClient;
@Before
public void start(){
highClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
}
@Test
public void testES02() throws Exception{
SearchRequest searchRequest = new SearchRequest("test01");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//关键字匹配
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("username","祖国");
//模糊匹配
matchQueryBuilder.fuzziness(Fuzziness.AUTO);
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = highClient.search(searchRequest,RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
System.out.println(hit.getSourceAsString());
JSONObject jsonObject = JSONObject.fromObject(hit.getSourceAsString());
String[] dateFormats = new String[] {"yyyy/MM/dd"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
User user = (User)JSONObject.toBean(jsonObject,User.class);
System.out.println(user);
}
}
@After
public void end() throws Exception{
if(highClient != null){
highClient.close();
}
}
}