客户端编程可以自己封装json http请求,也可以采用es客户端API。这里介绍API方式。
1. 初始化Client
public void init() {
String clusterName="elasticsearch";
String ip= "192.168.180.15";
Settings settings = Settings.settingsBuilder()
.put("cluster.name", clusterName)
.build();
try {
client = TransportClient.builder()
.settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip),9300));
createMapping("index", "type"); } catch (Exception e) {
e.printStackTrace();
}
}
分词映射:
private void createMapping(String indices,String mappingType)throws Exception{
new XContentFactory();
XContentBuilder builder=XContentFactory.jsonBuilder()
.startObject()
.startObject(mappingType)
.startObject("properties")
.startObject("XXX").field("type", "string").field("store", "yes").field("index","not_analyzed").endObject()
.startObject("YYY").field("type", "string").field("store", "yes").field("analyzer", "ik").endObject()
.startObject("ZZZ").field("type", "double").field("store", "yes").field("index","not_analyzed").endObject() .endObject()
.endObject()
.endObject();
PutMappingRequest mapping = Requests.putMappingRequest(indices).type(mappingType).source(builder);
client.admin().indices().putMapping(mapping).actionGet();
}
XXX,YYY,ZZZ代表业务字段,因为只演示技术,所以以虚拟字段代替。
2. 创建索引
//其中的map为业务数据,key=XXX/YYY/ZZZ
private void createChineseIndex(String id, Map<String, Object> map) throws Exception{
client.prepareIndex("index", "type", id).setSource(generateJson(map))
.execute().actionGet();
}
//生成json请求数据
private String generateJson(Map<String, Object> map) {
String json = "";
try {
XContentBuilder contentBuilder = XContentFactory.jsonBuilder()
.startObject();
for(String key:map.keySet()){
contentBuilder.field(key, map.get(key));
}
json = contentBuilder.endObject().string();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
3. 分组统计
private String searchGoodsName(String goodsName) {
String fullGoodsName=null;
SearchResponse response = client.prepareSearch("index")
.setTypes("type")
.setSearchType(SearchType.COUNT)
.setQuery(QueryBuilders.termQuery("XXX", goodsName))
.addAggregation(AggregationBuilders.terms("gCount").field("YYY"))
.execute().actionGet();
StringTerms gNameTerms = (StringTerms) response.getAggregations().get("gCount");
Iterator<Bucket> gradeBucketIt = gNameTerms.getBuckets().iterator();
while(gradeBucketIt.hasNext())
{
Bucket gradeBucket = gradeBucketIt.next();
System.out.println("名称:"+gradeBucket.getKey() + ",数量" + gradeBucket.getDocCount());
if(fullGoodsName==null){
fullGoodsName=gradeBucket.getKey().toString();
}
}
return fullGoodsName;
}
4.排序
SearchResponse response = client.prepareSearch("index")
.setTypes("type")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(QueryBuilders.termQuery("XXX", name)) // Query
.setPostFilter(QueryBuilders.termQuery("YYY", value))
.addSort("ZZZ", SortOrder.ASC) // Filter
.setFrom(0).setSize(60).execute().actionGet();
5.简单查询
SearchResponse response = client.prepareSearch("index")
.setTypes("type")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(QueryBuilders.termQuery("XXX", name)) // Query
.setPostFilter(QueryBuilders.termQuery("YYY", value))
.setFrom(0).setSize(60).setExplain(false).execute().actionGet();
6.关闭客户端
public void close() {
client.close();
}
分享到:
相关推荐
elasticsearch-7.12.1_Windows 客户端 + cerebro web页面展示工具
最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-...
最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip
适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...
elasticsearch-ik-7.16.2 分词器
最新版 elasticsearch-analysis-ik-7.10.2.zip最新版 elasticsearch-analysis-ik-7.10.2.zip
最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip
elasticsearch-analysis-ik-7.17.0
elasticsearch-analysis-ik-7.14.0-c.zip elasticsearch-analysis-ik-7.14.0-c.zip elasticsearch-analysis-ik-7.14.0-c.zip
Elasticsearch(elasticsearch-7.16.2-linux-x86_64.tar.gz适用于Linux x86_64)是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索...
kettle 支持elasticsearch7.x 批量上传的插件,减压后放到data-integration\plugins 目录下即可
elasticsearch-analysis-ik-7.4.2,es7.4.2 ik分词
最新版 elasticsearch-analysis-ik-7.17.6.zip最新版 elasticsearch-analysis-ik-7.17.6.zip
ETL工具kettle7.1抽取数据目前不支持elasticsearch 2.X以上版本,如果想要支持elasticsearch 6.X以上版本,必须替换elasticsearch-bulk-insert-plugin插件,该资源提供该插件的替换。 具体步骤为在spoon kettle\data-...
Elasticsearch(elasticsearch-7.16.2-aarch64.rpm适用于Linux arm x86_64)是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索功能和...
赠送jar包:elasticsearch-x-content-6.3.0.jar; 赠送原API文档:elasticsearch-x-content-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-x-content-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-x...
最新版 elasticsearch-analysis-ik-7.9.1.zip最新版 elasticsearch-analysis-ik-7.9.1.zip
elasticsearch-analysis-ik-7.4.0
elasticsearch-analysis-ik-7.14.0.zip和elasticsearch-analysis-ik-7.15.2.zip 帮助github速度比较差的同学下载
elasticsearch-repository-oss-6.7.0, elasticsearch-repository-oss-6.7.2从oss恢复es快照到集群插件。