首页 > 其他分享 >Elasticsearch03

Elasticsearch03

时间:2023-07-01 11:22:31浏览次数:42  
标签:opt Elasticsearch03 elasticsearch test 集群 zhangsan 节点

1.Spring Data Elasticsearch高级查询

1.1.基本查询

/**
* 高级查询-基本查询
* @return
*/
@RequestMapping("/matchQuery")
public Iterable<Goods> matchQuery(){
    //词条查询
    MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title","手机");
    Iterable<Goods> iterable = goodsRepository.search(matchQueryBuilder);
    return iterable;
}

1.2.分页查询

/**
* 高级查询-分页查询
*/
//高级查询-分页查询
@RequestMapping("/pageQuery")
public List<Goods> matchPageQuery(){
    //构建queryBuilder
    NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();
    //设置基础的查询条件
    searchQueryBuilder.withQuery(QueryBuilders.termQuery("category","手机"));
    //设置分页
    int page = 0; //查询的当前页 0表示第一页数据
    int size = 3; //每页显示条数
    searchQueryBuilder.withPageable(PageRequest.of(page,size));
    Page<Goods> search =esRepository.search(searchQueryBuilder.build());
    //总条数
    System.out.println(search.getTotalElements());
    //总页数
    System.out.println(search.getTotalPages());
    //每页显示条数
    System.out.println(search.getSize());
    //当前页
    System.out.println(search.getNumber());
    //获取分页数据
    List<Goods> content = search.getContent();
    return content;
}

1.3.聚合查询

/**
* 高级查询-聚合查询
*/
@RequestMapping("/matchQueryAgg")
public void matchQueryAgg() {
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 不查询任何结果
        queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{""},null));
        // 1、添加一个新的聚合,聚合类型为terms,聚合名称为brands,聚合字段为brand
        queryBuilder.addAggregation(
        AggregationBuilders.terms("images").field("image"));
        // 2、查询,需要把结果强转为AggregatedPage类型
        AggregatedPage<Goods> aggPage = (AggregatedPage<Goods>)
        goodsRepository.search(queryBuilder.build());
        // 3、解析
        // 3.1、从结果中取出名为pimgs的那个聚合,
        Terms agg = (Terms) aggPage.getAggregation("images");
        // 3.2、获取桶
        List<StringTerms.Bucket> buckets = (List<StringTerms.Bucket>)agg.getBuckets();
        // 3.3、遍历
        for (Terms.Bucket bucket : buckets) {
            // 3.4、获取桶中的key,即图片
            System.out.println(bucket.getKeyAsString());
            // 3.5、获取桶中的文档数量
            System.out.println(bucket.getDocCount());
    }
}

1.4. 高亮查询

//创建elasticsearch操作类
public interface GoodsRepository extends ElasticsearchRepository<Goods,Long> {
    //高亮处理
    @Highlight(
    fields = {@HighlightField(name = "title"),@HighlightField(name = "brand")},
    parameters = @HighlightParameters(preTags = {"<spanstyle='color:red'>"},postTags = {"</span>"})
    )
    public List<SearchHit<Goods>> findByTitleOrBrand(String title,String brand);
}
@RequestMapping("/findByTitleOrBrand")
public List<Goods> findByTitleOrBrand(){
    List<SearchHit<Goods>> list = goodsRepository.findByTitleOrBrand("手机","手机");
    List<Goods> highs = new ArrayList<>();
    for (SearchHit searchHit:list) {
        Goods goods = (Goods) searchHit.getContent();
        Map highlightFields = searchHit.getHighlightFields();
        List titles = (List) highlightFields.get("title");
        if (titles != null){
        	goods.setTitle((String) titles.get(0));
        }
        List brands = (List) highlightFields.get("brand");
        if (brands != null){
        	goods.setBrand((String) brands.get(0));
        }
        highs.add(goods);
    }
    return highs;
}

2.elasticsearch集群

2.1.搭建集群

Elasticsearch如果做集群的话节点至少三台服务器或者三个实例加入相同集群,三个节点最多只 能故障一台节点,如果故障两个节点,Elasticsearch将无法组成集群.会报错,Kibana也无法启 动,因为Kibana无法获取集群中的节点信息。

由于,我们使用只有一台虚拟机,所以我们在虚拟机中安装三个ES实例,搭建伪集群。

2.1.1.拷贝副本

修改elasticsearch的JVM占用内存参数,防止内存不足错误

vim /opt/elasticsearch/elasticsearch/config/jvm.options

默认情况下,ES启动JVM最小内存1G,最大内存1G

-xms:128m #最小内存
-xmx:128m #最大内存

将opt目录下的elasticsearch安装目录拷贝3个

cd /opt/elasticsearch
cp -r elasticsearch elasticsearch1
cp -r elasticsearch elasticsearch2
cp -r elasticsearch elasticsearch3

2.1.2. 修改elasticsearch.yml配置文件

创建日志目录

cd /opt/elasticsearch
mkdir logs
mkdir data
# 授权给zhangsan用户
chown -R zhangsan:zhangsan ./logs
chown -R zhangsan:zhangsan ./data
chown -R zhangsan:zhangsan ./elasticsearch1
chown -R zhangsan:zhangsan ./elasticsearch2
chown -R zhangsan:zhangsan ./elasticsearch3

分别配置三个节点的elasticsearch.yml配置文件

elasticsearch1配置文件

#集群名称
cluster.name: test-es
#节点名称
node.name: test-1
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9201
#内部节点之间沟通端口
transport.tcp.port: 9700
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["test-1", "test-2","test-3"]
#数据和存储路径
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs

elasticsearch2配置文件

#集群名称
cluster.name: test-es
#节点名称
node.name: test-2
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9202
#内部节点之间沟通端口
transport.tcp.port: 9800
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["test-1", "test-2","test-3"]
#数据和存储路径
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs

elasticsearch3 配置文件

#集群名称
cluster.name: test-es
#节点名称
node.name: test-3
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9203
#内部节点之间沟通端口
transport.tcp.port: 9900
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["test-1", "test-2","test-3"]
#数据和存储路径
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs

2.1.3.执行授权

在root用户下执行
chown -R zhangsan:zhangsan /opt/elasticsearch/elasticsearch1
chown -R zhangsan:zhangsan /opt/elasticsearch/elasticsearch2
chown -R zhangsan:zhangsan /opt/elasticsearch/elasticsearch3
如果有的日志文件授权失败,可使用(也是在root下执行)
cd /opt/elasticsearch/elasticsearch1/logs
chown -R zhangsan:zhangsan ./*
cd /opt/elasticsearch/elasticsearch2/logs
chown -R zhangsan:zhangsan ./*
cd /opt/elasticsearch/elasticsearch3/logs
chown -R zhangsan:zhangsan ./*

2.1.4.启动三个节点

依次启动elasticsearch的三个节点,之后在浏览器中输入http:/192.168.149.135:9201/cat/he
thy,查看集群状态信息

image

说明集群构建成功。

健康状况结果解释:
cluster			 	集群名称
status			 	集群状态
	green 			代表健康;
	yellow 			代表分配了所有主分片,但至少缺少一个副本,此时集群
数据仍旧完整:
	red 			代表部分主分片不可用,可能已经丢失数据。
node.total 			代表在线的节点总数量
node.data 			代表在线的数据节点的数量
shards 				存活的分片数量
pri 				存活的主分片数量 正常情况下 shards的数量是pri的两倍。
relo 				迁移中的分片数量,正常情况为 0
init 				初始化中的分片数量 正常情况为 0
unassign 			未分配的分片 正常情况为 0
pending_tasks 		准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time 	任务最长等待时间
active_shards_percent 正常分片百分比 正常情况为 100%

2.2.使用Kibana配置和管理集群

因为之前我们在单机演示的时候也使用到了Kibana,我们先复制出来一个Kibana,然后修改它 的集群配置

cd /opt/
cp -r kibana-7.4.0-linux-x86_64 kibana-7.4.0-linux-x86_64-cluster
# 由于 kibana 中文件众多,此处会等待大约1分钟的时间

修改Kibana的集群配置

vim kibana-7.4.0-linux-x86_64-cluster/config/kibana.yml
加入下面的配置
elasticsearch.hosts:
["http://localhost:9201","http://localhost:9202","http://localhost:9203"]

启动Kibana

sh kibana --allow-root

打开Kibana,点开 Stack Monitoring 集群监控

image

image

标签:opt,Elasticsearch03,elasticsearch,test,集群,zhangsan,节点
From: https://www.cnblogs.com/jiabaolatiao/p/17519010.html

相关文章