elasticsearch体验
// 1.创建client
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(newInetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
// 2.获取对索引进行操作的对象
IndicesAdminClient indicesAdminClient = client.admin().indices();
//3.创建索引,并且设置setting和mapping,可以使用
XContentBuilder settings = XContentFactory.jsonBuilder().startObject()。。。。.endObject()的格式添加
CreateIndexResponse ciReponse = indicesAdminClient.prepareCreate("index")
.setSettings(settings).addMapping("type",mapping).get();
//4.添加数据到索引中,不设id可以随机生成
BulkRequestBuilder bulkRequest = client.prepareBulk();
bulkRequest.add(client.prepareIndex("index", "type").setSource(source);
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
//5.查询数据
//5.1查询遍历并且高亮显示函数
public void searchFunction(TransportClient client,QueryBuilder queryBuilder,String indexName) {
HighlightBuilder highlightBuilder=new HighlightBuilder().field("*").requireFieldMatch(false);
highlightBuilder.preTags("<em>");
highlightBuilder.postTags("</em>");
SearchResponse response = client.prepareSearch(indexName)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(queryBuilder)
.highlighter(highlightBuilder)
.setSize(10).execute().actionGet();
while(true) {
System.out.println("total search result :"+ response.getHits().totalHits);
for (SearchHit hit : response.getHits()) {
//Iterator<Entry<String, Object>> iterator = hit
// .getSource().entrySet().iterator();
Iterator<Entry<String, HighlightField>> iterator = hit
.getHighlightFields().entrySet().iterator();
while(iterator.hasNext()) {
Entry<String, HighlightField> next = iterator.next();
System.out.println(next.getKey() + ": " + next.getValue());
if(response.getHits().hits().length == 0) {
break;
}
}
}
break;
}
}
//5.2 多个字段并集搜索
public void FeildOrQuery(TransportClient client,String indexName,String field,String...doclist) {
QueryBuilder queryBuilder = QueryBuilders.termsQuery(field, doclist);
searchFunction(client,queryBuilder,indexName);
}
//5.3 多个字段交集搜索
public void FeildAndQuery(TransportClient client,String indexName,String field,String...doclist) {
BoolQueryBuilder bqueryBuilder= QueryBuilders.boolQuery();
for(String doc : doclist) {
bqueryBuilder.must(QueryBuilders.termQuery(field, doc));
}
searchFunction(client,bqueryBuilder,indexName);
}
//5.4 模糊查询,用*匹配
public void fuzzyQuery(TransportClient client,String indexName,String field,String doc) {
QueryBuilder queryBuilder = QueryBuilders.wildcardQuery(field, doc);
searchFunction(client,queryBuilder,indexName);
}