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客户端创建索引库

03-使用Java客户端设置mapping步骤

04-使用java客户端设置mapping映射

05-向索引库中添加文档

06-添加文档的第二种方式

07-索引库查询_根据id查询

 08-索引库查询_根据term查询

09-索引库查询_queryString查询

10-查询分页设置

01、插入数据

02、设置分页

11-查询结果高亮显示

01、查看高亮结果

02、高亮显示代码实现


01-ES课程介绍

学习目标:

  1. 能够使用java客户端完成创建、删除索引的操作

  2. 能够使用java客户端完成文档的增删改的操作

  3. 能够使用java客户端完成文档的查询操作

  4. 能够完成文档的分页操作

  5. 能够完成文档的高亮查询操作

  6. 能够搭建Spring Data ElasticSearch的环境

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

  8. 能够掌握基本条件查询的方法命名规则

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

02-使用Java客户端创建索引库

一、使用Java客户端管理ES
1、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称。
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        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、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个客户端Client对象
        TransportClient client = new PreBuiltTransportClient(settings);
        //向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现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对象创建一个索引库
        client.admin().indices().prepareCreate("index_hello").get();//.get()执行操作//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、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        4、关闭client对象
2、使用Java客户端设置Mappings
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
    4)使用client向es服务器发送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、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个客户端Client对象
        TransportClient client = new PreBuiltTransportClient(settings);
        //向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现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对象创建一个索引库
        client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名称、get()执行操作
        //4、关闭client对象
        client.close();
    }

    @Test
    public void setMappings() throws Exception {
        //1、创建一个Settings对象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个Client对象,创建一个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、创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
        /*
            {
                "article": {type名称,表名:文章
                    "properties": {
                        "id": {//字段
                            "type": "long",
                            "store": true
                            // "index": "not_analyzed"
                        },
                        "title": {
                            "type": "text",
                            "store": true,
                            "index": true,
                            "analyzer": "ik_smart"//ik_max_word、standard
                        },
                        "content": {
                            "type": "text",
                            "store": true,
                            "index": true,//analyzed
                            "analyzer": "ik_smart"//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服务器发送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)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档(数据)包含多个字段(Fields)(列)

一、使用Java客户端管理ES
1、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称。
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        4、关闭client对象
2、使用Java客户端设置Mappings
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
    4)使用client向es服务器发送mapping信息
    5)关闭client对象
3、添加文档(一行数据)
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
    4)使用Client对象吧文档添加到索引库中
    5)关闭client


每一步都要创建一个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、创建一个Settings对象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个Client对象,创建一个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、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个客户端Client对象
        TransportClient client = new PreBuiltTransportClient(settings);
        //向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现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对象创建一个索引库
        client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名称、get()执行操作
        //4、关闭client对象
        client.close();
    }

    @Test
    public void setMappings() throws Exception {
        //3、创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
        /*
            {
                "article": {type名称,表名:文章
                    "properties": {
                        "id": {//字段
                            "type": "long",
                            "store": true
                            // "index": "not_analyzed"
                        },
                        "title": {
                            "type": "text",
                            "store": true,
                            "index": true,
                            "analyzer": "ik_smart"//ik_max_word、standard
                        },
                        "content": {
                            "type": "text",
                            "store": true,
                            "index": true,//analyzed
                            "analyzer": "ik_smart"//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服务器发送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)创建一个Settings对象
        //2)创建一个Client对象
        //public void init() throws Exception {...}
        //3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                    .field("id", 2l)//long型数据 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();//执行操作
        //5)关闭client客户端
        client.close();
    }
}

ElasticSearch-学习笔记04【Java客户端操作索引库】

ElasticSearch-学习笔记04【Java客户端操作索引库】

06-添加文档的第二种方式

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)

4、添加文档第二种方式
    创建一个pojo类
    使用工具类把pojo转换成json字符串
    把文档写入索引库

ElasticSearch-学习笔记04【Java客户端操作索引库】

ElasticSearch-学习笔记04【Java客户端操作索引库】

@Test
public void testAddDocument2() throws Exception {
    //创建一个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-索引库查询_根据id查询

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
    QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根据Term查询(关键词)
    QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3、QueryString查询方式(带分析的查询)
    QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度与激情").defaultField("title");
    查询步骤:
    1)创建一个Client对象
    2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
    3)使用client执行查询
    4)得到查询的结果
    5)取查询结果的总记录数
    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、创建一个Settings对象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个Client对象,创建一个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)创建一个client对象
        //public void init() throws Exception {}
        //2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
        //3)使用client执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查询的结果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查询结果的总记录数
        System.out.println("查询结果总记录数:" + 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-索引库查询_根据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、创建一个Settings对象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个Client对象,创建一个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执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查询的结果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查询结果的总记录数
        System.out.println("查询结果总记录数:" + 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)创建一个client对象
        //public void init() throws Exception {}
        //2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
        search(queryBuilder);
    }

    @Test
    public void testQueryByTerm() throws Exception {
        //创建一个QueryBuilder对象
        //参数1:要搜索的字段
        //参数2:要搜索的关键词
        TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");
        //执行查询
        search(queryBuilder);
    }
}

09-索引库查询_queryString查询

ElasticSearch-学习笔记04【Java客户端操作索引库】

10-查询分页设置

01、插入数据

ElasticSearch-学习笔记04【Java客户端操作索引库】

ElasticSearch-学习笔记04【Java客户端操作索引库】

@Test
public void testAddDocument3() throws Exception {//批量添加数据
    for (int i = 4; i < 100; i++) {
        //创建一个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、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
    在client对象执行查询之前,设置分页信息。
    然后再执行查询
     //执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                //设置分页信息
                .setFrom(0)
                //每页显示的行数
                .setSize(5)
                .get();
    分页需要设置两个值,一个from、size
    from:起始的行号,从0开始。
    size:每页显示的记录数

11-查询结果高亮显示

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
5、查询结果高亮显示
(1)高亮的配置
        1)设置高亮显示的字段
        2)设置高亮显示的前缀
        3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息
(3)遍历结果列表时可以从结果中取高亮结果

01、查看高亮结果

给关键词的前后加上HTML标签作为前后缀。

ElasticSearch-学习笔记04【Java客户端操作索引库】

ElasticSearch-学习笔记04【Java客户端操作索引库】

02、高亮显示代码实现

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、创建一个Settings对象
        Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
        //2、创建一个Client对象,创建一个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执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查询的结果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查询结果的总记录数
        System.out.println("查询结果总记录数:" + 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)创建一个client对象
        //public void init() throws Exception {}
        //2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
        search(queryBuilder);
        /*
        //3)使用client执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                .get();
        //4)得到查询的结果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查询结果的总记录数
        System.out.println("查询结果总记录数:" + 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 {
        //创建一个QueryBuilder对象
        //参数1:要搜索的字段
        //参数2:要搜索的关键词
        TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");
        //执行查询
        search(queryBuilder);
    }

    @Test
    public void testQueryStringQuery() throws Exception {
        //创建一个QueryBuilder对象
        QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("爆炸").defaultField("title");
        //执行查询
        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执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                //设置分页信息
                .setFrom(0)//起始行号从0开始
                .setSize(5)//每一页显示的行数
                //设置高亮信息
                .highlighter(highlightBuilder)
                .get();
        //4)得到查询的结果
        SearchHits searchHits = searchResponse.getHits();
        //5)取查询结果的总记录数
        System.out.println("查询结果总记录数:" + 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——快速生成变量。文章来源地址https://www.toymoban.com/news/detail-408717.html

到了这里,关于ElasticSearch-学习笔记04【Java客户端操作索引库】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 干货 | 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日
    浏览(51)
  • 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日
    浏览(43)
  • windows环境安装elasticsearch+kibana并完成JAVA客户端查询

    elasticsearch 官网下载比较慢,有时还打不开,可以通过https://elasticsearch.cn/download/下载,先找到对应的版本,最好使用迅雷下载,秒下的,我的下载速度可以达到40M/S 解压后点击 elasticsearch-7.10.0binelasticsearch.bat 运行成功后,输入http://120.0.0.1:9200,可以访问说明ES启动成功 点击

    2024年02月14日
    浏览(52)
  • Eureka 学习笔记2:客户端 DiscoveryClient

    版本 awsVersion = ‘1.11.277’ DiscoveryClient # cacheRefreshTask shouldFetchRegistry 指定是否从服务端拉取注册列表,默认 true client.refresh.interval 指定从服务端拉取注册列表的时间间隔,默认 30s client.cacheRefresh.exponentialBackOffBound 指定从服务端拉取注册列表的 最大时间间隔 ,默认 10 注1 :当

    2024年02月15日
    浏览(41)
  • ios客户端学习笔记(七):iOS客户端的UI设计

    iOS客户端的UI设计是指在iOS操作系统上开发应用程序时所涉及的用户界面设计,包括应用程序的布局、颜色、字体、图标等元素的设计。良好的UI设计应该能够提高用户体验,使用户能够轻松地使用应用程序。 在iOS客户端的UI设计中,需要考虑以下几个方面: 应用程序布局应

    2023年04月26日
    浏览(49)
  • Elasticsearch8.x版本Java客户端Elasticsearch Java API Client中常用API练习

    在Es7.15版本之后,es官方将它的高级客户端RestHighLevelClient标记为弃用状态。同时推出了全新的java API客户端Elasticsearch Java API Client,该客户端也将在Elasticsearch8.0及以后版本中成为官方推荐使用的客户端。 Elasticsearch Java API Client支持除Vector title search API和Find structure API之外的所有

    2024年04月11日
    浏览(49)
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档

    为了方便演示,我关闭了elasticsearch的安全验证,带安全验证的初始化方式将在最后专门介绍 其中,HotelDoc是一个实体类 带安全验证的连接有点复杂,将下列代码中CA证书的位置改为实际所在的位置就行了。 password为elastic的密码,可以在我的另一篇文章中查看密码的重置方式

    2024年04月11日
    浏览(50)
  • Elasticsearch:在 Java 客户端应用中管理索引 - Elastic Stack 8.x

    管理索引是客户端应用常用的一些动作,比如我们创建,删除,打开 及关闭索引等操作。在今天的文章中,我将描述如何在 Java 客户端应用中对索引进行管理。 我们需要阅读之前的文章 “Elasticsearch:在 Java 客户端中使用 truststore 来创建 HTTPS 连接”。在那篇文章中,我们详

    2023年04月09日
    浏览(40)
  • Java客户端调用elasticsearch进行深度分页查询 (search_after)

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 具体的Search_after解释,可以看我这篇文章 elasticsearch 深度分页查询 Search_after(图文教程) 参考:https://blog.csdn.net/qq_44056652/article/details/126341810 作者:神的孩子

    2024年03月22日
    浏览(52)
  • ios客户端学习笔记(三):学习Swift的设计模式

    设计模式是指在软件开发中常用的一些解决问题的方法和思想,它可以帮助你更好地组织代码和提高代码的可维护性。你需要学习常见的设计模式,如MVC、MVVM、单例模式、工厂模式等,在开发应用程序时应用它们。 当你学习常见的设计模式时,可以参考以下设计模式的定义

    2023年04月22日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包