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

news2024/11/27 4:24:05
  • 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-查询分页设置

插入数据

设置分页

11-查询结果高亮显示


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对象

9201、9202、9203:对外提供http服务的端口号;

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

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搭建集群时的闪退问题

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

 

一、使用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映射

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单独提取出来。

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();
    }
}

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

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

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

@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

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查询

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查询

10-查询分页设置

插入数据

@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();
}

设置分页

一、使用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)遍历结果列表时可以从结果中取高亮结果

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

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.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();
    }

    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);

        }
        //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");
    }
}

xxx.xxx.var——快速生成变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一看就会 超简单详细 ChatGPT 注册与使用攻略

OpenAI 新上线的 ChatGPT 可谓是火爆出圈&#xff0c;这个语言对话模型可以回答问题&#xff0c;承认错误&#xff0c;挑战不正确的前提&#xff0c;还能帮你修改代码中的 bug…… ChatGPT 的应用场景很广泛。它可以用于处理多种类型的对话&#xff0c;包括对话机器人、问答机器…

科研试剂供应1476737-97-9,Bis-PEG2-endo-BCN可发生点击反应

●外观以及性质&#xff1a;Bis-PEG2-endo-BCN一般为白色固体&#xff0c;BCN其为点击试剂&#xff0c;点击化学&#xff08;Click chemistry&#xff09;&#xff0c;又译为“链接化学”、“动态组合化学” &#xff08;Dynamic Combinatorial Chemistry&#xff09;、“速配接…

Java面试题:Java集合框架

文章目录一、Java集合框架二、Java集合特性三、各集合类的使用ArrayListLinkedListHashSetHashSet源码解析对源码进行总结HashSet可同步HashSet的使用HashMap四、Iterator迭代器五、遍历集合元素的若干方式参考文章&#xff1a;Hash详解参考文章&#xff1a;深入浅出学Java——…

电子科技大学人工智能期末复习笔记(五):机器学习

目录 前言 监督学习 vs 无监督学习 回归 vs 分类 Regression vs Classification 训练集 vs 测试集 vs 验证集 泛化和过拟合 Generalization & Overfitting 线性分类器 Linear Classifiers 激活函数 - 概率决策 ⚠线性回归 决策树 Decision Trees 决策树构建递归…

uniApp封装一个滑块组件

最近 项目中有一个需求 PC端动态设计的表单 移动端要能渲染出来 那么 就要去找到对应的组件 而其中 没有的 就包括滑块 没有又能怎么办 只能自己封装一个 我们直接上代码 <template><view class"u-slider" tap"onClick" :class"[disabled…

IT行业那么辛苦,我们为什么还要选择它?

疫情三年&#xff0c;我们学会了什么&#xff1f;工作诚可贵&#xff0c;技能价更高。 搞IT辛苦&#xff1f;有啥辛苦的&#xff1f;说什么辛苦&#xff1f;能有工作&#xff0c;工资又高&#xff0c;还要什么自行车&#xff0c;有啥搞啥吧&#xff01;每次看到网络上有人问有…

面试官问:如何确保缓存和数据库的一致性?

如果你对这个问题有过研究&#xff0c;应该可以发现这个问题其实很好回答&#xff0c;如果第一次听到或者第一次遇到这个问题&#xff0c;估计会有点懵&#xff0c;今天我们来聊聊这个话题。 1、问题分析 首先我们来看看为什么会有这个问题&#xff01; 我们在日常开发中&am…

为什么 Web3 社交将超越其 Web2 同行

我们最近听到了很多关于 web3 社交媒体平台的消息。但如果你没有跟上&#xff0c;你可能想知道为什么我们已经有了 Twitter、Facebook、Instagram 等&#xff0c;我们还需要 web3 社交。好吧&#xff0c;这一切都取决于谁拥有权力。 在 web2 中&#xff0c;权力掌握在寻求收入最…

测试开发之Django实战示例 第六章 追踪用户行为

第六章 追踪用户行为在之前的章节里完成了小书签将外站图片保存至本站的功能&#xff0c;并且实现了通过jQuery发送AJAX请求&#xff0c;让用户可以对图片进行喜欢/不喜欢操作。这一章将学习如何创建一个用户关注系统和创建用户行为流数据&#xff0c;还将学习Django的信号框架…

Rockstar Games遭黑客攻击,《侠盗猎车手6》90个开发视频外泄

当地时间9月19日&#xff0c;视频游戏开发商Rockstar Games证实&#xff0c;其 热门游戏《侠盗猎车手6》&#xff08;Grand Theft Auto&#xff09;开发片段遭到黑客大规模窃取 &#xff0c;这一泄露事件立即在游戏圈迅速传播。 据报道&#xff0c; 上周末黑客至少泄露了90个游…

一文教你玩转 Apache Doris 分区分桶新功能

数据分片&#xff08;Sharding&#xff09;是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制&#xff0c;而分布式数据库则通过数据划分的规则&#xff0c;将数据打散分布至不同的机器或节点上&#xf…

蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵

目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序&#xff0c;输入一个4位的自然数&#xff0c;将组成该数的各位数字重新排列&#xff0c;形成一个最大数和一个最小数&#xff0c;之后用最大数减去最小数&#xff0c;得到一…

数据库管理-第五十六期 监控(20230210)

数据库管理 2023-02-10第五十六期 监控1 怎么监控2 直观3 历史分析4 另一个BUG总结第五十六期 监控 春节后的7天班过后就来到了2月份&#xff0c;本周对之前发现X8M上的那个bug进行补丁修复和协助从12.2迁移了一套PDB到这个一体机上面&#xff0c;2次割接。这周还和原厂老大哥…

Android 面试三部曲——你做到了几点?

今天的干货来点轻松一点的&#xff0c;这次的分享是《面试需要哪些准备&#xff1f;》&#xff0c;主要分为三个部分&#xff1a; 面试前。面试中。面试后。 面试前 1、『工作经验中的职位要层层递进&#xff1a;初、中、高、资深级』&#x1f352; 2.投简历 你的简历必须要…

C/C++:程序环境和预处理/宏

程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境&#xff0c;它用于实际执行代码。 编译和链接 一份源代码(比如test.c)需要通过编译&#xf…

SSO单点登录 - 多系统,单一位置登录,实现多系统同时登录 学习笔记

(1)单点登录 多系统的前提下&#xff0c;单一位置的登录&#xff0c;会实现多系统同时登录的一种技术。 常出现在互联网应用和企业级平台中 如&#xff1a;京东 单点登录一般是用于互相授信的系统&#xff0c;实现单一位置登录&#xff0c;全系统有效的。 注意&#xff1a…

我看ChatGPT

ChatGPT出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型&#xff08;LLM,Large Language Model&#xff09;效果能好成这样&#xff1b;惊醒是顿悟到我们对LLM的认知及发展理念&#xff0c;距离世界最先进的想法&#xff0c;差得有点远。我属于后知后觉的那批人&#…

ubuntu 使用 adb 工具卸载鸿蒙系统预装软件

准备工作 打开 USB 调试 进入 “设置->关于手机” 连续点击版本号, 直到有提示开启了"开发人员选项" 进入 “设置->系统和更新->开发人员选项”, 打开 USB 调式, 顺便可以把"自动系统更新"关了 下载 adb 工具 官方地址: https://developer.an…

打通数据价值链,百分点数据科学基础平台实现数据到决策的价值转换 | 爱分析调研

随着企业数据规模的大幅增长&#xff0c;如何利用数据、充分挖掘数据价值&#xff0c;服务于企业经营管理成为当下企业数字化转型的关键。 如何挖掘数据价值&#xff1f;企业需要一步步完成数据价值链条的多个环节&#xff0c;如数据集成、数据治理、数据建模、数据分析、数据…

CoreData + CloudKit 支持的 App 在导出(export)新建托管对象时内存飙升导致被杀死的解决

问题现象 CoreData + CloudKit 支持的 App 在新建托管对象并同步导出到云时可能会导致进程内存疯狂增长,最终很快被系统杀死。 如果你的 App 满足以下三点,那么很可能出现这种情况: CoreData + CloudKit 支持云存储中已存入大量数据(1.5GB+)CoreData 数据结构包含若干一…