ES基础

RestHighLevelClient(6.5)

官网:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.5/java-rest-low-usage-initialization.html



RestClient实例可以通过相应的建立 RestClientBuilder的类,通过创建RestClient#builder(HttpHost…) 静态方法。唯一必需的参数是客户端将与之通信的一个或多个主机,作为HttpHost的实例提供

RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200, "http"),
    new HttpHost("localhost", 9201, "http")).build();

该RestClient班是线程安全的,理想情况下具有相同的生命周期为使用它的应用程序。重要的是它在不再需要时关闭,以便它使用的所有资源得到正确释放,以及底层的http客户端实例及其线程:

restClient.close();



RestClientBuilder还允许在构建RestClient实例时可选地设置以下配置参数:

RestClientBuilder builder = RestClient.builder(
    new HttpHost("localhost", 9200, "http"));
Header[] defaultHeaders = new Header[]{new BasicHeader("header", "value")};
builder.setDefaultHeaders(defaultHeaders);

设置需要随每个请求一起发送的默认标头,以防止必须为每个请求指定它们

RestClientBuilder builder = RestClient.builder(
    new HttpHost("localhost", 9200, "http"));
builder.setMaxRetryTimeoutMillis(10000);

设置在多次尝试同一请求时应该遵守的超时。默认值为30秒,与默认套接字超时相同。如果自定义套接字超时,则应相应地调整最大重试超时

RestClientBuilder builder = RestClient.builder(
        new HttpHost("localhost", 9200, "http"));
builder.setFailureListener(new RestClient.FailureListener() {
    @Override
    public void onFailure(Node node) {

    }
});

设置一个侦听器,每次节点出现故障时都会收到通知,以防需要采取措施。启用嗅探失败时在内部使用。

RestClientBuilder builder = RestClient.builder(
    new HttpHost("localhost", 9200, "http"));
builder.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS);

设置节点选择器以用于过滤客户端将请求发送到客户端本身的节点之间的节点。这有助于防止在启用嗅探时向专用主节点发送请求。默认情况下,客户端向每个配置的节点发送请求。

RestClientBuilder builder = RestClient.builder(
        new HttpHost("localhost", 9200, "http"));
builder.setRequestConfigCallback(
    new RestClientBuilder.RequestConfigCallback() {
        @Override
        public RequestConfig.Builder customizeRequestConfig(
                RequestConfig.Builder requestConfigBuilder) {
            return requestConfigBuilder.setSocketTimeout(10000); 
        }
    });

设置允许修改默认请求配置的回调(例如,请求超时,身份验证或org.apache.http.client.config.RequestConfig.Builder 允许设置的任何内容 )

RestClientBuilder builder = RestClient.builder(
    new HttpHost(“localhost”,9200,“http”)); 
builder.setHttpClientConfigCallback(new HttpClientConfigCallback(){ 
        @ 
        Override public HttpAsyncClientBuilder customizeHttpClient(
                HttpAsyncClientBuilder httpClientBuilder){ 
            return httpClientBuilder.setProxy(
                new HttpHost(“proxy”,9000,“http”));  
        } 
    };

java 使用RestHighLevelClient

SearchSourceBuilder ssb = new SearchSourceBuilder()
ssb.size(100)
//构建搜索的query语句
ssb.query(createQuery())
//设置返回字段包含和不包含哪些字段,可为null
ssb.fetchSource(new String[],new String[])
//设置超时时间
ssb.timeout(new TimeValue(15,TimeUnit.SECONDS))

//定义参数
SearchRequest sr = new SearchRequest(getIndex()).routing(queryParam.tenantId)
sr.source(ssb)

//执行获取结果
SearchResponse resp = client.search(sr, RequestOptions.DEFAULT)

Es基本操作

index(索引)
相当于mysql中的数据库
type(类型)
相当于mysql中的一张表 (7.x后只有_doc)
document(文档)
相当于mysql中的一行(一条记录)
field(域)
相当于mysql中的一列(一个字段)
节点
一个服务器,由一个名字来标识
集群
一个或多个节点组织在一起
分片
将一份数据划分为多小份的能力,允许水平分割和扩展容量。多个分片可以响应请求,提高性能和吞吐量

创建一个索引(即创建数据库):(index_name为索引的名称)
PUT index_name
{
“settings” : {
“number_of_shards” : 5,
“number_of_replicas” : 1
}
}

查看索引信息:(即查看数据库)
GET index_name

GET index_name/_settings

查看映射
GET index_name/_mapping

设置映射:(即设置字段类型)
PUT index_name
{
“mappings” : {
“type_name” : {
“properties” : {
“field_name1” : {
“type” : “keyword”
},
“field_name2” : {
“type” : “integet”
},
“field_name3” : {
“type” : “text”,
“analyzer” : “ik_max_word”
}
}
}
}
}

插入文档:(即插入一条数据)
可以指定文档id
PUT index_name/type_name/id (相当于PUT 数据库名/表名/id)
也可以不指定id
POST index_name/type_name

查看文档:
GET index_name/type_name/id
查看_source中的部分字段:
GET index_name/type_name/id?_source=field1,field2

修改文档:
1.一种是通过PUT的全覆盖方式,旧数据将被删除,以新的代替
PUT index_name/type_name/id
2.另一种是通过POST方式,只对部分字段进行修改.
POST index_name/type_name/id/_update
{
“doc” : {
“field_name” : “ “
}
}

删除文档:
DELETE index_name/type_name/id

###安装es
gitHub:
https://github.com/elastic/elasticsearch

@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作

下载并解压
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/
启动 ./bin/elasticsearch
第一次启动时内存不够,将config中jvm.options中的
-Xms512M
-Xmx512M

由于需要修改磁盘,所以不能用root用户启动,需要新建用户
创建新用户并赋权限
第一步:liunx创建新用户 adduser XXX 然后给创建的用户加密码 passwd XXX 输入两次密码。
第二步:切换刚才创建的用户 su XXX 然后执行elasticsearch 会显示Permission denied 权限不足。
第四步:root给XXX赋权限,chown -R XXX /你的elasticsearch安装目录。

查看当前节点的所有索引(index)
curl -X GET ‘http://localhost:9200/_cat/indices?v
列出每个 Index 所包含的 Type
curl ‘localhost:9200/_mapping?pretty=true’

curl - ://

创建索引:
curl -XPUT ‘localhost:9200/dxh?pretty’
将一个信息索引到dxh下的ljf类型中,这个文档的id为1:
curl -XPUT ‘localhost:9200/dxh/ljf/1?pretty’ -d ‘{ “name”:”dongxiaohua” }’
获取文档:

kibana

按文档数量降序列出所有文档信息
GET /_cat/indices?v&s=docs.count:desc
按文档大小降序列出index
GET /_cat/indices?v&h=i,tm&s=tm:desc