国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

這篇具有很好參考價值的文章主要介紹了ElasticSearch-學習筆記04【Java客戶端操作索引庫】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • Java后端-學習路線-筆記匯總表【黑馬程序員】
  1. ElasticSearch-學習筆記01【ElasticSearch基本介紹】【day01】
  2. ElasticSearch-學習筆記02【ElasticSearch索引庫維護】
  3. ElasticSearch-學習筆記03【ElasticSearch集群】
  4. ElasticSearch-學習筆記04【Java客戶端操作索引庫】【day02】
  5. ElasticSearch-學習筆記05【SpringDataElasticSearch】

目錄

01-ES課程介紹

02-使用Java客戶端創(chuàng)建索引庫

03-使用Java客戶端設置mapping步驟

04-使用java客戶端設置mapping映射

05-向索引庫中添加文檔

06-添加文檔的第二種方式

07-索引庫查詢_根據(jù)id查詢

?08-索引庫查詢_根據(jù)term查詢

09-索引庫查詢_queryString查詢

10-查詢分頁設置

01、插入數(shù)據(jù)

02、設置分頁

11-查詢結果高亮顯示

01、查看高亮結果

02、高亮顯示代碼實現(xiàn)


01-ES課程介紹

學習目標:

  1. 能夠使用java客戶端完成創(chuàng)建、刪除索引的操作

  2. 能夠使用java客戶端完成文檔的增刪改的操作

  3. 能夠使用java客戶端完成文檔的查詢操作

  4. 能夠完成文檔的分頁操作

  5. 能夠完成文檔的高亮查詢操作

  6. 能夠搭建Spring Data ElasticSearch的環(huán)境

  7. 能夠完成Spring Data ElasticSearch的基本增刪改查操作

  8. 能夠掌握基本條件查詢的方法命名規(guī)則

管理ES的客戶端工具:postman、head插件。

02-使用Java客戶端創(chuàng)建索引庫

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
?? ?步驟:
?? ?1)創(chuàng)建一個Java工程
?? ?2)添加jar包,添加maven的坐標
?? ?3)編寫測試方法實現(xiàn)創(chuàng)建索引庫
?? ??? ?1、創(chuàng)建一個Settings對象,相當于是一個配置信息,主要用于配置集群的名稱。
?? ??? ?2、創(chuàng)建一個客戶端Client對象
?? ??? ?3、使用client對象創(chuàng)建一個索引庫
?? ??? ?4、關閉client對象

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

9201、9202、9203:對外提供http服務的端口號;

9301、9302、9303:tcp形式連接ES服務器(InetSocketTransportAddress方法)。

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

package com.itheima.es;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.net.InetAddress;

public class ElasticSearchClientTest {
    @Test
    public void createIndex() throws Exception {
        //1、創(chuàng)建一個Settings對象,相當于是一個配置信息,主要配置集群的名稱。
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個客戶端Client對象
        TransportClient client = new PreBuiltTransportClient(settings);
        //向client中添加三個ip地址的端口號,防止一個服務器不好使然后出現(xiàn)bug
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
        //3、使用client對象創(chuàng)建一個索引庫
        client.admin().indices().prepareCreate("index_hello").get();//.get()執(zhí)行操作//index_hello索引名稱
        //4、關閉client對象
        client.close();
    }
}

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch搭建集群時的閃退問題

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

03-使用Java客戶端設置mapping步驟

ElasticSearch-學習筆記04【Java客戶端操作索引庫】?ElasticSearch-學習筆記04【Java客戶端操作索引庫】

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
?? ?步驟:
?? ?1)創(chuàng)建一個Java工程
?? ?2)添加jar包,添加maven的坐標
?? ?3)編寫測試方法實現(xiàn)創(chuàng)建索引庫
?? ??? ?1、創(chuàng)建一個Settings對象,相當于是一個配置信息,主要配置集群的名稱。
?? ??? ?2、創(chuàng)建一個客戶端Client對象
?? ??? ?3、使用client對象創(chuàng)建一個索引庫
?? ??? ?4、關閉client對象
2、使用Java客戶端設置Mappings
?? ?步驟:
?? ?1)創(chuàng)建一個Settings對象
?? ?2)創(chuàng)建一個Client對象
?? ?3)創(chuàng)建一個mapping信息,應該是一個json數(shù)據(jù),可以是字符串,也可以是XContextBuilder對象
?? ?4)使用client向es服務器發(fā)送mapping信息
?? ?5)關閉client對象

04-使用java客戶端設置mapping映射

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

package com.itheima.es;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.net.InetAddress;

public class ElasticSearchClientTest {
    @Test
    public void createIndex() throws Exception {
        //1、創(chuàng)建一個Settings對象,相當于是一個配置信息,主要配置集群的名稱。
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個客戶端Client對象
        TransportClient client = new PreBuiltTransportClient(settings);
        //向client中添加三個ip地址的端口號,防止一個服務器不好使然后出現(xiàn)bug
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
        //3、使用client對象創(chuàng)建一個索引庫
        client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名稱、get()執(zhí)行操作
        //4、關閉client對象
        client.close();
    }

    @Test
    public void setMappings() throws Exception {
        //1、創(chuàng)建一個Settings對象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個Client對象,創(chuàng)建一個TransportClient對象
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));

        //3、創(chuàng)建一個mapping信息,應該是一個json數(shù)據(jù),可以是字符串,也可以是XContextBuilder對象
        /*
            {
                "article": {type名稱,表名:文章
                    "properties": {
                        "id": {//字段
                            "type": "long",
                            "store": true
                            // "index": "not_analyzed"
                        },
                        "title": {
                            "type": "text",
                            "store": true,
                            "index": true,
                            "analyzer": "ik_smart"http://ik_max_word、standard
                        },
                        "content": {
                            "type": "text",
                            "store": true,
                            "index": true,//analyzed
                            "analyzer": "ik_smart"http://ik_max_word、standard
                        }
                    }
                }
            }
        */
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                    .startObject("article")//type名稱
                        .startObject("properties")
                            .startObject("id")
                                .field("type", "long")
                                .field("store", true)
                            .endObject()
                            .startObject("title")
                                .field("type", "text")
                                .field("store", true)
                                .field("analyzer", "ik_smart")
                            .endObject()
                            .startObject("content")
                                .field("type", "text")
                                .field("store", true)
                                .field("analyzer", "ik_smart")
                            .endObject()
                        .endObject()
                    .endObject()
                .endObject();
        //4、使用client向es服務器發(fā)送mapping信息,使用client把mapping信息設置到索引庫中
        client.admin().indices()
                .preparePutMapping("index_hello")//設置要做映射的索引,設置索引庫名稱
                .setType("article")//設置要做映射的type,設置type名稱
                .setSource(builder)//mapping信息,可以是XContentBuilder對象也可以是json格式的字符串
                .get();
        //5、關閉client對象,關閉鏈接
        client.close();
    }
}

05-向索引庫中添加文檔

es集群可以包含多個索引(indices)(數(shù)據(jù)庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多個文檔(documents)(行),然后每個文檔(數(shù)據(jù))包含多個字段(Fields)(列)。

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
?? ?步驟:
?? ?1)創(chuàng)建一個Java工程
?? ?2)添加jar包,添加maven的坐標
?? ?3)編寫測試方法實現(xiàn)創(chuàng)建索引庫
?? ??? ?1、創(chuàng)建一個Settings對象,相當于是一個配置信息,主要用于配置集群的名稱。
?? ??? ?2、創(chuàng)建一個客戶端Client對象
?? ??? ?3、使用client對象創(chuàng)建一個索引庫
?? ??? ?4、關閉client對象
2、使用Java客戶端設置Mappings
?? ?步驟:
?? ?1)創(chuàng)建一個Settings對象
?? ?2)創(chuàng)建一個Client對象
?? ?3)創(chuàng)建一個mapping信息,應該是一個json數(shù)據(jù),可以是字符串,也可以是XContextBuilder對象
?? ?4)使用client向es服務器發(fā)送mapping信息
?? ?5)關閉client對象
3、添加文檔(一行數(shù)據(jù))
?? ?步驟:
?? ?1)創(chuàng)建一個Settings對象
?? ?2)創(chuàng)建一個Client對象
?? ?3)創(chuàng)建一個文檔對象,創(chuàng)建一個json格式的字符串或者使用XContentBuilder
?? ?4)使用Client對象吧文檔添加到索引庫中
?? ?5)關閉client


每一步都要創(chuàng)建一個client對象,所以將client單獨提取出來。

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

package com.itheima.es;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;

public class ElasticSearchClientTest {
    private TransportClient client;

    @Before
    public void init() throws Exception {
        //1、創(chuàng)建一個Settings對象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個Client對象,創(chuàng)建一個TransportClient對象
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
    }

    @Test
    public void createIndex() throws Exception {
        //1、創(chuàng)建一個Settings對象,相當于是一個配置信息,主要配置集群的名稱。
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個客戶端Client對象
        TransportClient client = new PreBuiltTransportClient(settings);
        //向client中添加三個ip地址的端口號,防止一個服務器不好使然后出現(xiàn)bug
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
        //3、使用client對象創(chuàng)建一個索引庫
        client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名稱、get()執(zhí)行操作
        //4、關閉client對象
        client.close();
    }

    @Test
    public void setMappings() throws Exception {
        //3、創(chuàng)建一個mapping信息,應該是一個json數(shù)據(jù),可以是字符串,也可以是XContextBuilder對象
        /*
            {
                "article": {type名稱,表名:文章
                    "properties": {
                        "id": {//字段
                            "type": "long",
                            "store": true
                            // "index": "not_analyzed"
                        },
                        "title": {
                            "type": "text",
                            "store": true,
                            "index": true,
                            "analyzer": "ik_smart"http://ik_max_word、standard
                        },
                        "content": {
                            "type": "text",
                            "store": true,
                            "index": true,//analyzed
                            "analyzer": "ik_smart"http://ik_max_word、standard
                        }
                    }
                }
            }
        */
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                    .startObject("article")//type名稱
                        .startObject("properties")
                            .startObject("id")
                                .field("type", "long")
                                .field("store", true)
                            .endObject()
                            .startObject("title")
                                .field("type", "text")
                                .field("store", true)
                                .field("analyzer", "ik_smart")
                            .endObject()
                            .startObject("content")
                                .field("type", "text")
                                .field("store", true)
                                .field("analyzer", "ik_smart")
                            .endObject()
                        .endObject()
                    .endObject()
                .endObject();
        //4、使用client向es服務器發(fā)送mapping信息,使用client把mapping信息設置到索引庫中
        client.admin().indices()
                .preparePutMapping("index_hello")//設置要做映射的索引,設置索引庫名稱
                .setType("article")//設置要做映射的type,設置type名稱
                .setSource(builder)//mapping信息,可以是XContentBuilder對象也可以是json格式的字符串
                .get();
        //5、關閉client對象,關閉鏈接
        client.close();
    }

    @Test
    public void testAddDocument() throws Exception {
        //1)創(chuàng)建一個Settings對象
        //2)創(chuàng)建一個Client對象
        //public void init() throws Exception {...}
        //3)創(chuàng)建一個文檔對象,創(chuàng)建一個json格式的字符串或者使用XContentBuilder
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                    .field("id", 2l)//long型數(shù)據(jù) 2l
                    .field("title", "Cause I got a crush on you who you~")
                    .field("content", "你是我的我是你的誰~")
                .endObject();
        //4)使用Client對象把文檔對象添加到索引庫中
        client.prepareIndex()
                .setIndex("index_hello")//設置索引名稱
                .setType("article")//設置typr
                .setId("2")//設置文檔的id,如果不設置id的話es會自動生成一個id
                .setSource(builder)//設置文檔信息,builder對象或json串
                .get();//執(zhí)行操作
        //5)關閉client客戶端
        client.close();
    }
}

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

06-添加文檔的第二種方式

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
2、使用Java客戶端設置Mappings
3、添加文檔(一行數(shù)據(jù))

4、添加文檔第二種方式
?? ?創(chuàng)建一個pojo類
?? ?使用工具類把pojo轉換成json字符串
?? ?把文檔寫入索引庫

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

@Test
public void testAddDocument2() throws Exception {
    //創(chuàng)建一個Article對象
    Article article = new Article();
    //設置對象的屬性
    article.setId(3l);
    article.setTitle("再多一眼看一眼就會爆炸~");
    article.setContent("再近一點靠近點快被融化~");
    //把article對象轉換成json格式的字符串
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonDocument = objectMapper.writeValueAsString(article);
    System.out.println(jsonDocument);
    //使用client對象把文檔寫入索引庫
    client.prepareIndex("index_hello", "article", "3")
            .setSource(jsonDocument, XContentType.JSON)
            .get();
    //關閉客戶端
    client.close();
}

07-索引庫查詢_根據(jù)id查詢

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
2、使用Java客戶端設置Mappings
3、添加文檔(一行數(shù)據(jù))
4、添加文檔的第二種方式

二、使用ES客戶端實現(xiàn)搜索
1、根據(jù)id搜索
?? ?QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根據(jù)Term查詢(關鍵詞)
?? ?QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3、QueryString查詢方式(帶分析的查詢)
?? ?QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度與激情").defaultField("title");
?? ?查詢步驟:
?? ?1)創(chuàng)建一個Client對象
?? ?2)創(chuàng)建一個查詢對象,可以使用QueryBuilders工具類創(chuàng)建QueryBuilder對象
?? ?3)使用client執(zhí)行查詢
?? ?4)得到查詢的結果
?? ?5)取查詢結果的總記錄數(shù)
?? ?6)取查詢結果列表
?? ?7)關閉client

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

package com.itheima.es;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;

public class SearchIndex {
    private TransportClient client;

    @Before
    public void init() throws Exception {
        //1、創(chuàng)建一個Settings對象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個Client對象,創(chuàng)建一個TransportClient對象
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
    }

    @Test
    public void testSearchById() throws Exception {
        //1)創(chuàng)建一個client對象
        //public void init() throws Exception {}
        //2)創(chuàng)建一個查詢對象,可以使用QueryBuilders工具類創(chuàng)建QueryBuilder對象
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
        //3)使用client執(zhí)行查詢
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查詢的結果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查詢結果的總記錄數(shù)
        System.out.println("查詢結果總記錄數(shù):" + searchHits.getTotalHits());
        //6)取查詢結果列表
        Iterator<SearchHit> iterator = searchHits.iterator();
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next();
            //打印文檔對象,以json格式輸出
            System.out.println(searchHit.getSourceAsString());
            //取文檔的屬性
            System.out.println("---------------文檔的屬性");
            Map<String, Object> document = searchHit.getSource();
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));
        }
        //7)關閉client
        client.close();
    }
}

?08-索引庫查詢_根據(jù)term查詢

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

package com.itheima.es;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;

public class SearchIndex {
    private TransportClient client;

    @Before
    public void init() throws Exception {
        //1、創(chuàng)建一個Settings對象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個Client對象,創(chuàng)建一個TransportClient對象
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
    }

    private void search(QueryBuilder queryBuilder) throws Exception {
        //3)使用client執(zhí)行查詢
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查詢的結果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查詢結果的總記錄數(shù)
        System.out.println("查詢結果總記錄數(shù):" + searchHits.getTotalHits());
        //6)取查詢結果列表
        Iterator<SearchHit> iterator = searchHits.iterator();
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next();
            //打印文檔對象,以json格式輸出
            System.out.println(searchHit.getSourceAsString());
            //取文檔的屬性
            System.out.println("---------------文檔的屬性");
            Map<String, Object> document = searchHit.getSource();
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));
        }
        //7)關閉client
        client.close();
    }

    @Test
    public void testSearchById() throws Exception {
        //1)創(chuàng)建一個client對象
        //public void init() throws Exception {}
        //2)創(chuàng)建一個查詢對象,可以使用QueryBuilders工具類創(chuàng)建QueryBuilder對象
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
        search(queryBuilder);
    }

    @Test
    public void testQueryByTerm() throws Exception {
        //創(chuàng)建一個QueryBuilder對象
        //參數(shù)1:要搜索的字段
        //參數(shù)2:要搜索的關鍵詞
        TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");
        //執(zhí)行查詢
        search(queryBuilder);
    }
}

09-索引庫查詢_queryString查詢

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

10-查詢分頁設置

01、插入數(shù)據(jù)

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

@Test
public void testAddDocument3() throws Exception {//批量添加數(shù)據(jù)
    for (int i = 4; i < 100; i++) {
        //創(chuàng)建一個Article對象
        Article article = new Article();
        //設置對象的屬性
        article.setId(i);
        article.setTitle("再多一眼看一眼就會爆炸~" + i);
        article.setContent("再近一點靠近點快被融化~" + i);
        //把article對象轉換成json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonDocument = objectMapper.writeValueAsString(article);
        System.out.println(jsonDocument);
        //使用client對象把文檔寫入索引庫
        client.prepareIndex("index_hello", "article", i + "")
                .setSource(jsonDocument, XContentType.JSON)
                .get();
    }
    //關閉客戶端
    client.close();
}

02、設置分頁

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
2、使用Java客戶端設置Mappings
3、添加文檔(一行數(shù)據(jù))
4、添加文檔的第二種方式

二、使用ES客戶端實現(xiàn)搜索
1、根據(jù)id搜索
2、根據(jù)Term查詢(關鍵詞)
3、QueryString查詢方式(帶分析的查詢)
4、分頁的處理
?? ?在client對象執(zhí)行查詢之前,設置分頁信息。
?? ?然后再執(zhí)行查詢
?? ? //執(zhí)行查詢
? ? ? ? SearchResponse searchResponse = client.prepareSearch("index_hello")
? ? ? ? ? ? ? ? .setTypes("article")
? ? ? ? ? ? ? ? .setQuery(queryBuilder)
? ? ? ? ? ? ? ? //設置分頁信息
? ? ? ? ? ? ? ? .setFrom(0)
? ? ? ? ? ? ? ? //每頁顯示的行數(shù)
? ? ? ? ? ? ? ? .setSize(5)
? ? ? ? ? ? ? ? .get();
?? ?分頁需要設置兩個值,一個from、size
?? ?from:起始的行號,從0開始。
?? ?size:每頁顯示的記錄數(shù)

11-查詢結果高亮顯示

一、使用Java客戶端管理ES
1、創(chuàng)建索引庫
2、使用Java客戶端設置Mappings
3、添加文檔(一行數(shù)據(jù))
4、添加文檔的第二種方式

二、使用ES客戶端實現(xiàn)搜索
1、根據(jù)id搜索
2、根據(jù)Term查詢(關鍵詞)
3、QueryString查詢方式(帶分析的查詢)
4、分頁的處理
5、查詢結果高亮顯示
(1)高亮的配置
?? ??? ?1)設置高亮顯示的字段
?? ??? ?2)設置高亮顯示的前綴
?? ??? ?3)設置高亮顯示的后綴
(2)在client對象執(zhí)行查詢之前,設置高亮顯示的信息
(3)遍歷結果列表時可以從結果中取高亮結果

01、查看高亮結果

給關鍵詞的前后加上HTML標簽作為前后綴。

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

02、高亮顯示代碼實現(xiàn)

package com.itheima.es;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;

public class SearchIndex {
    private TransportClient client;

    @Before
    public void init() throws Exception {
        //1、創(chuàng)建一個Settings對象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、創(chuàng)建一個Client對象,創(chuàng)建一個TransportClient對象
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
    }

    private void search(QueryBuilder queryBuilder) throws Exception {
        //3)使用client執(zhí)行查詢
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查詢的結果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查詢結果的總記錄數(shù)
        System.out.println("查詢結果總記錄數(shù):" + searchHits.getTotalHits());
        //6)取查詢結果列表
        Iterator<SearchHit> iterator = searchHits.iterator();
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next();
            //打印文檔對象,以json格式輸出
            System.out.println(searchHit.getSourceAsString());
            //取文檔的屬性
            System.out.println("---------------文檔的屬性");
            Map<String, Object> document = searchHit.getSource();
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));
        }
        //7)關閉client
        client.close();
    }

    @Test
    public void testSearchById() throws Exception {
        //1)創(chuàng)建一個client對象
        //public void init() throws Exception {}
        //2)創(chuàng)建一個查詢對象,可以使用QueryBuilders工具類創(chuàng)建QueryBuilder對象
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
        search(queryBuilder);
        /*
        //3)使用client執(zhí)行查詢
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查詢的結果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查詢結果的總記錄數(shù)
        System.out.println("查詢結果總記錄數(shù):" + searchHits.getTotalHits());
        //6)取查詢結果列表
        Iterator<SearchHit> iterator = searchHits.iterator();
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next();
            //打印文檔對象,以json格式輸出
            System.out.println(searchHit.getSourceAsString());
            //取文檔的屬性
            System.out.println("---------------文檔的屬性");
            Map<String, Object> document = searchHit.getSource();
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));
        }
        //7)關閉client
        client.close();*/
    }

    @Test
    public void testQueryByTerm() throws Exception {
        //創(chuàng)建一個QueryBuilder對象
        //參數(shù)1:要搜索的字段
        //參數(shù)2:要搜索的關鍵詞
        TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");
        //執(zhí)行查詢
        search(queryBuilder);
    }

    @Test
    public void testQueryStringQuery() throws Exception {
        //創(chuàng)建一個QueryBuilder對象
        QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("爆炸").defaultField("title");
        //執(zhí)行查詢
        search(queryBuilder, "title");
    }

    private void search(QueryBuilder queryBuilder, String highLightField) throws Exception {
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field(highLightField);//高亮顯示的字段
        highlightBuilder.preTags("<em>");//前綴
        highlightBuilder.postTags("</em>");//后綴
        //3)使用client執(zhí)行查詢
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                //設置分頁信息
                .setFrom(0)//起始行號從0開始
                .setSize(5)//每一頁顯示的行數(shù)
                //設置高亮信息
                .highlighter(highlightBuilder)
                .get();
        //4)得到查詢的結果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查詢結果的總記錄數(shù)
        System.out.println("查詢結果總記錄數(shù):" + searchHits.getTotalHits());
        //6)取查詢結果列表
        Iterator<SearchHit> iterator = searchHits.iterator();
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next();
            //打印文檔對象,以json格式輸出
            System.out.println(searchHit.getSourceAsString());
            //取文檔的屬性
            System.out.println("---------------文檔的屬性");
            Map<String, Object> document = searchHit.getSource();
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));
            System.out.println("****************************高亮結果");
            Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
            System.out.println(highlightFields);
            //取title高亮顯示的結果
            HighlightField field = highlightFields.get(highLightField);//取key
            Text[] fragments = field.getFragments();
            if (fragments != null) {
                String title = fragments[0].toString();
                System.out.println(title);
            }
        }
        //7)關閉client
        client.close();
    }
}

高亮顯示:

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

ElasticSearch-學習筆記04【Java客戶端操作索引庫】

xxx.xxx.var——快速生成變量。文章來源地址http://www.zghlxwxcb.cn/news/detail-408717.html

到了這里,關于ElasticSearch-學習筆記04【Java客戶端操作索引庫】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 干貨 | Elasticsearch Java 客戶端演進歷史和選型指南

    干貨 | Elasticsearch Java 客戶端演進歷史和選型指南

    Elasticsearch 官方提供了很多版本的 Java 客戶端,包含但不限于: Transport 客戶端 Java REST 客戶端 Low Level REST 客戶端 High Level REST 客戶端 Java API 客戶端 非官方的 Java 客戶端,包含但不限于: Jest 客戶端 BBoss 客戶端 Spring Data Elasticsearch 客戶端 ...... 寫出來的就接近十款客戶端! El

    2023年04月11日
    瀏覽(22)
  • Elasticsearch Java客戶端和Spring data elasticsearch-Elasticsearch文章三

    Elasticsearch Java客戶端和Spring data elasticsearch-Elasticsearch文章三

    https://www.elastic.co/cn/ 整合springboot看上一篇文章 一定要對應好版本,Elasticsearch 的不同版本變化是真大, https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/ Springboot: 2.7.10 spring-data-elasticsearch: 4.4.10 spring-boot-starter-data-elasticsearch: 2.7.10 elasticsearch-java: 7.17.9 https://github.com/

    2024年02月14日
    瀏覽(44)
  • windows環(huán)境安裝elasticsearch+kibana并完成JAVA客戶端查詢

    windows環(huán)境安裝elasticsearch+kibana并完成JAVA客戶端查詢

    elasticsearch 官網(wǎng)下載比較慢,有時還打不開,可以通過https://elasticsearch.cn/download/下載,先找到對應的版本,最好使用迅雷下載,秒下的,我的下載速度可以達到40M/S 解壓后點擊 elasticsearch-7.10.0binelasticsearch.bat 運行成功后,輸入http://120.0.0.1:9200,可以訪問說明ES啟動成功 點擊

    2024年02月14日
    瀏覽(27)
  • Eureka 學習筆記2:客戶端 DiscoveryClient

    版本 awsVersion = ‘1.11.277’ DiscoveryClient # cacheRefreshTask shouldFetchRegistry 指定是否從服務端拉取注冊列表,默認 true client.refresh.interval 指定從服務端拉取注冊列表的時間間隔,默認 30s client.cacheRefresh.exponentialBackOffBound 指定從服務端拉取注冊列表的 最大時間間隔 ,默認 10 注1 :當

    2024年02月15日
    瀏覽(22)
  • ios客戶端學習筆記(七):iOS客戶端的UI設計

    iOS客戶端的UI設計是指在iOS操作系統(tǒng)上開發(fā)應用程序時所涉及的用戶界面設計,包括應用程序的布局、顏色、字體、圖標等元素的設計。良好的UI設計應該能夠提高用戶體驗,使用戶能夠輕松地使用應用程序。 在iOS客戶端的UI設計中,需要考慮以下幾個方面: 應用程序布局應

    2023年04月26日
    瀏覽(27)
  • Elasticsearch8.x版本Java客戶端Elasticsearch Java API Client中常用API練習

    在Es7.15版本之后,es官方將它的高級客戶端RestHighLevelClient標記為棄用狀態(tài)。同時推出了全新的java API客戶端Elasticsearch Java API Client,該客戶端也將在Elasticsearch8.0及以后版本中成為官方推薦使用的客戶端。 Elasticsearch Java API Client支持除Vector title search API和Find structure API之外的所有

    2024年04月11日
    瀏覽(25)
  • [elastic 8.x]java客戶端連接elasticsearch與操作索引與文檔

    為了方便演示,我關閉了elasticsearch的安全驗證,帶安全驗證的初始化方式將在最后專門介紹 其中,HotelDoc是一個實體類 帶安全驗證的連接有點復雜,將下列代碼中CA證書的位置改為實際所在的位置就行了。 password為elastic的密碼,可以在我的另一篇文章中查看密碼的重置方式

    2024年04月11日
    瀏覽(27)
  • Elasticsearch:在 Java 客戶端應用中管理索引 - Elastic Stack 8.x

    管理索引是客戶端應用常用的一些動作,比如我們創(chuàng)建,刪除,打開 及關閉索引等操作。在今天的文章中,我將描述如何在 Java 客戶端應用中對索引進行管理。 我們需要閱讀之前的文章 “Elasticsearch:在 Java 客戶端中使用 truststore 來創(chuàng)建 HTTPS 連接”。在那篇文章中,我們詳

    2023年04月09日
    瀏覽(22)
  • Java客戶端調用elasticsearch進行深度分頁查詢 (search_after)

    Java客戶端調用elasticsearch進行深度分頁查詢 (search_after)

    前言 這是我在這個網(wǎng)站整理的筆記,有錯誤的地方請指出,關注我,接下來還會持續(xù)更新。 作者:神的孩子都在歌唱 具體的Search_after解釋,可以看我這篇文章 elasticsearch 深度分頁查詢 Search_after(圖文教程) 參考:https://blog.csdn.net/qq_44056652/article/details/126341810 作者:神的孩子

    2024年03月22日
    瀏覽(16)
  • ios客戶端學習筆記(三):學習Swift的設計模式

    設計模式是指在軟件開發(fā)中常用的一些解決問題的方法和思想,它可以幫助你更好地組織代碼和提高代碼的可維護性。你需要學習常見的設計模式,如MVC、MVVM、單例模式、工廠模式等,在開發(fā)應用程序時應用它們。 當你學習常見的設計模式時,可以參考以下設計模式的定義

    2023年04月22日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包