Elasticsearch的Java API/查询/分页等

来源:互联网 发布:淘宝电商会计做帐流程 编辑:程序博客网 时间:2024/05/21 17:35

Elasticsearch的Java API

添加Maven依赖。

链接到ES集

1.通过TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口
TransportClient client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("host1", 9300)).addTransportAddress(new InetSocketTransportAddress("host2", 9300));
如果需要使用其他名称的集群(默认是elasticsearch),需要如下设置
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").build();
TransportClientclient = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("host1", 9300));

2.通过TransportClient这个接口,自动嗅探整个集群的状态,es会自动把集群中其它机器的ip地址加到客户端中
Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).build();
TransportClient client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("host1", 9300));


索引index(四种json, map, bean, es helpers)

IndexResponse response = client.prepareIndex(“hello", "emp", "1").setSource().execute().actionGet();
查询get
GetResponse response = client.prepareGet(“hello", "emp", "1").execute().actionGet();

更新update
更新或者插入upsert
删除delete
DeleteResponse response = client.prepareDelete(“hello", "emp", "1").execute().actionGet();

总数count
long count = client.prepareCount(“hello").execute().get().getCount();

批量操作bulk
查询search
SearchType



Elasticsearch的查询

es的搜索类型有4种
query and fetch(速度最快)(返回N倍数据量)
query then fetch(默认的搜索方式)
DFS query and fetch(可以更精确控制搜索打分和排名。)
DFS query then fetch
DFS解释:见备注
总结一下,从性能考虑QUERY_AND_FETCH是最快的,DFS_QUERY_THEN_FETCH是最慢的。从搜索的准确度来说,DFS要比非DFS的准确度更高。

查询:query
.setQuery(QueryBuilders.matchQuery("name", "test"))
分页:from/size
.setFrom(0).setSize(1)
排序:sort
.addSort("age", SortOrder.DESC)
过滤:filter
.setPostFilter(FilterBuilders.rangeFilter("age").from(1).to(19))
高亮:highlight
统计:facet(已废弃)使用aggregations 替代
根据字段进行分组统计
根据字段分组,统计其他字段的值
size设置为0,会获取所有数据,否则,只会返回10条


Elasticsearch的分页

与SQL使用LIMIT来控制单“页”数量类似,Elasticsearch使用的是from以及size两个参数:
size:每次返回多少个结果,默认值为10
from:从哪条结果开始,默认值为0
假设每页显示5条结果,那么1至3页的请求就是:
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10
注意:不要一次请求过多或者页码过大的结果,这么会对服务器造成很大的压力。因为它们会在返回前排序。一个请求会经过多个分片。每个分片都会生成自己的排序结果。然后再进行集中整理,以确保最终结果的正确性。

timed_out告诉了我们查询是否超时
curl -XGET http://localhost:9200/_search?timeout=10ms
es会在10ms之内返回查询内容
注意:timeout并不会终止查询,它只是会在你指定的时间内返回当时已经查询到的数据,然后关闭连接。在后台,其他的查询可能会依旧继续,尽管查询结果已经被返回了。



原创粉丝点击