es

一 索引模板(用于通过模板匹配匹配到的所有索引)详细请点击

{

  "order": 0,                              // 模板优先级

  "template": "sample*",              // 模板匹配的名称方式

  "settings": {...},                        // 索引设置

  "mappings": {...},                        // 索引中各字段的映射定义

  "aliases": {...}                          // 索引的别名

}

(1)模板优先级:优先级越高,越优先执行,优先级高的会覆盖优先级的索引。

(2)模板匹配:当新建的索引时,所有以sample开头索引的会自动匹配该索引模板。

(3)索引设置:一般定义的有主分片,拷贝分片,自定义分析器,刷新时间,

                           一般分析器中有过滤器、分词器、标记过滤器。

                     映射字符过滤器(mapping char filter)、HTML过滤器(HTML Strip char filter)、格式替换过滤器(Pattern Replace char filter)。html_strip 字符过滤器去除所有的 HTML 标签。

(4)索引映射定义:有动态映射,自定义映射。

(5)索引别名:利用索引别名,可以实现零停机时间重新索引。

二 传统数据库与ES之间对比

关系数据库es

DataBaseindex

Tabletype

RowDocument

ColumnField

注:type在es 7.0以后会为es创建唯一一个映射类型_doc

三 以下的内容来源是es的官网

第一类:是关于index模板的API

在Index APIs 是创建索引的也就是相当于创建库,

一 Document APIs中的方法

1  CreateIndexRequest:这个请求时创建一个索引,在es中的索引相当于mysql 中创建一个数据库(create database XX)。

     settings()方法 中会设置主分区,拷贝分区,刷新时间。

     mapping()方法配置映射的。

     aliases()方法是给模板请别名。

以下是测试方法,请准备好开发环境(下载安装es及其es head可视化工具)

publicfinalstaticString ES_COLLECTION_NAME="first";publicResponseDatabuildIndexDB()throwsIOException{        CreateIndexRequest createIndexRequest=newCreateIndexRequest();        createIndexRequest.index(ES_COLLECTION_NAME);//setting中会设置主分区,拷贝分区,刷新时间createIndexRequest.settings(Settings.builder().put("index.number_of_shards","3")                          .put("index.number_of_replicas","2"));        Map message=newHashMap<>();        message.put("type","text");        Map properties=newHashMap<>();        properties.put("message",message);        Map mapping=newHashMap<>();        mapping.put("mapping",mapping);//动态映射createIndexRequest.mapping("{\n"+"  \"properties\": {\n"+"    \"message\": {\n"+"      \"type\": \"text\"\n"+"    }\n"+"  }\n"+"}",                XContentType.JSON);//起别名createIndexRequest.aliases("hanqiang");//可以为索引设置setting,mapping,aliases/*createIndexRequest.source("{\n" +

                "    \"settings\" : {\n" +

                "        \"number_of_shards\" : 1,\n" +

                "        \"number_of_replicas\" : 0\n" +

                "    },\n" +

                "    \"mappings\" : {\n" +

                "        \"properties\" : {\n" +

                "            \"message\" : { \"type\" : \"text\" }\n" +

                "        }\n" +

                "    },\n" +

                "    \"aliases\" : {\n" +

                "        \"twitter_alias\" : {}\n" +

                "    }\n" +

                "}", XContentType.JSON);*/RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        CreateIndexResponse createIndexResponse=esClient.indices().create(createIndexRequest,RequestOptions.DEFAULT);        String name=createIndexResponse.index();        System.out.println("获得创建的索引名称 "+name);        RestClientConfig.close(esClient);returnResponseData.success();    }publicResponseDatacreateIndex()throwsIOException{        CreateIndexRequest createIndexRequest=newCreateIndexRequest();        createIndexRequest.index(ES_COLLECTION_NAME);//对于索引设置setting属性createIndexRequest.settings(Settings.builder()//主分片的个数.put("index.number_of_shards",3)//主分片的拷贝分片个数.put("index.number_of_replicas",2)        );        Map message=newHashMap<>();        message.put("type","text");// message.put("analyzer","lowercase_analyzer");// message.put("index","analyzed");Map propertise=newHashMap<>();        propertise.put("message",message);        Map mapping=newHashMap<>();        mapping.put("propertise",propertise);        createIndexRequest.mapping(String.valueOf(mapping));//以下是通过source方法直接就可以设置  settings,mappings,aliases/*createIndexRequest.source("{\n" +

                "    \"settings\" : {\n" +

                "        \"number_of_shards\" : 1,\n" +

                "        \"number_of_replicas\" : 0\n" +

                "    },\n" +

                "    \"mappings\" : {\n" +

                "        \"properties\" : {\n" +

                "            \"message\" : { \"type\" : \"text\" }\n" +

                "        }\n" +

                "    },\n" +

                "    \"aliases\" : {\n" +

                "        \"twitter_alias\" : {}\n" +

                "    }\n" +

                "}", XContentType.JSON);*/RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();//同步CreateIndexResponse createIndexResponse=esClient.indices().create(createIndexRequest,RequestOptions.DEFAULT);//获取索引名称String name=createIndexResponse.index();//插入一条数据Users user=newUsers();        user.setAge(10);        user.setName("han");        esClient.index(newIndexRequest(name).source(user, XContentType.JSON),RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success();    }

2  DeleteIndexRequest是删除索引模板。

    timeout()设置超时时间。

    masterNodeTimeout()主节点超时时间。

publicResponseDatadeleteIndex()throwsIOException{        DeleteIndexRequest deleteIndexRequest=newDeleteIndexRequest(ES_COLLECTION_NAME);        RestHighLevelClient esClient= RestClientConfig.restHighLevelClient();        AcknowledgedResponse deleteIndexResponse=esClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success(deleteIndexResponse);    }

3   GetIndexRequest判断索引是否存在

public ResponseData existsIndex() throws IOException {

        GetIndexRequest getIndexRequest=new GetIndexRequest(ES_COLLECTION_NAME);

        RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();

        Boolean flag=esClient.indices().exists(getIndexRequest,RequestOptions.DEFAULT);

        //用完,之后一定养成关闭数据库的好习惯。

        RestClientConfig.close(esClient);

        return ResponseData.success(flag);

    }

第二类:是关于插入文本的API

1  IndexRequest 添加文本数据

publicResponseDatasaveDocument()throwsIOException{//连接数据库RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        Map jsonMap=newHashMap(2);        jsonMap.put("name","han");        jsonMap.put("age","19");        jsonMap.put("sex","男");        jsonMap.put("numberId","11XXXXXXX1213x");        IndexRequest in=newIndexRequest(ES_COLLECTION_NAME).source(jsonMap, XContentType.JSON);        IndexResponse indexResponse=esClient.index(in, RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success(indexResponse);    }

2   BulkRequest  批量插入

publicResponseDatabulkDocument()throwsIOException{//连接数据库RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        BulkRequest bulkRequest=newBulkRequest();for(inti=0;i<6;i++){            Map jsonMap=newHashMap();            jsonMap.put("name","han*"+i);            jsonMap.put("age","19*"+i);            jsonMap.put("sex","男*"+i);            jsonMap.put("numberId","11XXXXXXX1213*"+i);            bulkRequest.add(newIndexRequest(ES_COLLECTION_NAME).source(jsonMap,XContentType.JSON));        }        BulkResponse bulkResponse=esClient.bulk(bulkRequest,RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success(bulkResponse);    }

2.1  批量操作

publicResponseDatabulkCustomDocument()throwsIOException{//连接数据库RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        BulkRequest bulkRequest=newBulkRequest();//修改指定数据Map jsonMap=newHashMap<>(5);        jsonMap.put("name","bulkCustomDocument方法的测试");        jsonMap.put("age","18测试");        jsonMap.put("sex","男测试");        jsonMap.put("numberId","1502222XXXXX2");        UpdateRequest updateRequest=newUpdateRequest(ES_COLLECTION_NAME,"Un0QDHUB_jnDNOQPxN3B");        updateRequest.doc(jsonMap);        bulkRequest.add(updateRequest);//删除指定数据DeleteRequest deleteRequest=newDeleteRequest(ES_COLLECTION_NAME,"U30QDHUB_jnDNOQPxN3B");        bulkRequest.add(deleteRequest);        BulkResponse bulkResponse=esClient.bulk(bulkRequest,RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success(bulkResponse);    }

3 UpdateRequest  修改操作

  public ResponseData updateDocument() throws IOException {

        //连接数据库

        RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();

        //修改数据

        Map<String,Object> jsonMap=new HashMap(5);

        jsonMap.put("name","qiaa测试");

        jsonMap.put("age","20测试");

        jsonMap.put("sex","女测试");

        jsonMap.put("numberId","111222XXXXX2");

        UpdateRequest updateRequest=new UpdateRequest(ES_COLLECTION_NAME,"QX0ODHUB_jnDNOQP9t0P");

        updateRequest.doc(jsonMap);

        UpdateResponse updateResponse =esClient.update(updateRequest,RequestOptions.DEFAULT);

        //用完,之后一定养成关闭数据库的好习惯。

        RestClientConfig.close(esClient);

        return ResponseData.success(updateResponse);

    }

4 DeleteRequest 删除操作

publicResponseDatadeleteDocument()throwsIOException{//连接数据库RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        DeleteRequest deleteRequest=newDeleteRequest(ES_COLLECTION_NAME,"OJuOv3QBEFBKZIVoeLzv");        DeleteResponse deleteResponse=esClient.delete(deleteRequest,RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success(deleteResponse);    }

5 GetRequest判断是否存在

publicResponseDatagetDocument()throwsIOException{//连接数据库RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        GetRequest getRequest=newGetRequest(ES_COLLECTION_NAME,"Un0QDHUB_jnDNOQPxN3B");//由于exists()仅返回true或false,因此我们建议您关闭提取功能_source和所有存储的字段,这样请求的内容会稍微减轻一些getRequest.fetchSourceContext(newFetchSourceContext(false));//禁用获取存储的字段。getRequest.storedFields("_none_");        GetResponse getResponse=esClient.get(getRequest,RequestOptions.DEFAULT);//用完,之后一定养成关闭数据库的好习惯。RestClientConfig.close(esClient);returnResponseData.success(getResponse);    }

第三类:是关于搜索文本的API

1 SearchRequest 查询全部数据

publicResponseDatasearchAll()throwsIOException{        RestHighLevelClient esClient= RestClientConfig.restHighLevelClient();        SearchRequest searchRequest=newSearchRequest(ES_COLLECTION_NAME);        SearchSourceBuilder searchSourceBuilder=newSearchSourceBuilder();        searchSourceBuilder.query(QueryBuilders.matchAllQuery());        searchRequest.source(searchSourceBuilder);        SearchResponse searchResponse=esClient.search(searchRequest, RequestOptions.DEFAULT);//关闭连接RestClientConfig.close(esClient);returnResponseData.success(searchResponse);    }

2 多条件查询

publicResponseDatamanySearch()throwsIOException{        RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        MultiSearchRequest multiSearchRequest=newMultiSearchRequest();        SearchRequest first=newSearchRequest(ES_COLLECTION_NAME);        SearchSourceBuilder searchSourceBuilder=newSearchSourceBuilder();        searchSourceBuilder.query(QueryBuilders.matchQuery("sex","女测试"));        first.source(searchSourceBuilder);        multiSearchRequest.add(first);        SearchRequest two=newSearchRequest(ES_COLLECTION_NAME);        SearchSourceBuilder searchSourceBuilder1=newSearchSourceBuilder();        searchSourceBuilder1.query(QueryBuilders.matchQuery("age","20"));        two.source(searchSourceBuilder1);        multiSearchRequest.add(two);        MultiSearchResponse searchResponse=esClient.msearch(multiSearchRequest,RequestOptions.DEFAULT);//关闭连接RestClientConfig.close(esClient);returnResponseData.success(searchResponse);    }


3 CountRequest 计数查询

publicResponseDatacountSearch()throwsIOException{        RestHighLevelClient esClient=RestClientConfig.restHighLevelClient();        CountRequest countRequest=newCountRequest(ES_COLLECTION_NAME);        SearchSourceBuilder searchSourceBuilder=newSearchSourceBuilder();        searchSourceBuilder.query(QueryBuilders.matchAllQuery());        countRequest.source(searchSourceBuilder);        CountResponse countResponse=esClient.count(countRequest,RequestOptions.DEFAULT);//关闭连接RestClientConfig.close(esClient);returnResponseData.success(countResponse);    }


这是一个公共方法连接和关闭es 

@Configuration

@Slf4j

public class RestClientConfig {

    public static RestHighLevelClient restHighLevelClient(){

        RestHighLevelClient client=new RestHighLevelClient(

                RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));

        //如果是集群

//        RestHighLevelClient client = new RestHighLevelClient(

//                RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")

//                        , new HttpHost("127.0.0.1", 9201, "http")

//                        , new HttpHost("127.0.0.1", 9202, "http")));

        return client;

    }

    /**

    * 关闭es连接

    * @param client es客户端

    * @throws IOException io异常

    */

    public static void close(RestHighLevelClient client) {

        try {

            client.close();

        } catch (IOException e) {

            log.error("关闭es连接失败!",e);

        }

    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,961评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,444评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,009评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,082评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,101评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,271评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,738评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,395评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,539评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,434评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,481评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,160评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,749评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,816评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,038评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,548评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,140评论 2 341

推荐阅读更多精彩内容