elasticsearch全文搜索技术之二kibana的简介和使用(代码片段)

teayear teayear     2022-10-23     375

关键词:

1,课程回顾
2,本章重点
3,具体内容

3.1 kibana的简介和使用
简介:
Kibana 是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进行视觉探索和实时分析。 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索,查看,用来交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。
解压配置:
下载上传文件到虚拟机
解压:
tar -xzvf kibana-6.4.0-linux-x86_64.tar.gz -C /usr/
改名:
mv /usr/kibana-6.4.0-linux-x86_64/ /usr/kibana
配置环境变量:
vim /etc/profile
source /etc/profile
修改配置:
cd /usr/kibana
vim config/kibana.yml
:2 端口号 :7 主机IP :28 es url地址

  启动访问(不兼容360浏览器):  
             kibana  (配置过环境变量,非守护运行)   ctrl+c 直接关闭
             kibana  &  (守护方式运行)  关闭麻烦点
             ps -ef |grep kibana    查找进程  
             kill -9   xxxx  杀死进程

启动完毕,显示:
server running at http://192.168.23.211:5601
3.2 创建,修改和删除索引及数据的增删改查:
数据类型
核心类型(Core datatype)
字符串:string,string类型包含 text 和 keyword。

text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立 索引;允许es来检索这些词,text类型不能用来排序和聚合。例如电子邮件主体部分或者一款产品的介绍

keyword:该类型不需要进行分词,可以被用来检索过滤、排序和聚合, 可以满足电子邮箱地址、主机名、状态码、邮政编码和标签等数据的要求。

数值型:long、integer、short、byte、double、float

日期型:date

布尔型:boolean

二进制型:binary
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
索引的管理:
创建索引的语法
PUT /my_index

  “settings”: … any settings … ,
  “mappings”:
    “type_one”: … any mappings … ,
    “type_two”: … any mappings … ,//6.0之前的版本可以
    …
  

mappings: 映射(Mapping) 相当于数据表的表结构

number_of_shards:每个索引的主分片数,这个配置在索引创建后不能修改。默认值为5
number_of_replicas:每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
创建索引的示例
 
PUT /index_hr
    
    "settings":
     "number_of_shards":3,
     "number_of_replicas":1
    ,
    "mappings":
     "emp_type":
     "properties":
     "empno":
     "type":"integer"
     ,
     "ename":
     "type":"keyword"
     ,
     "job":
     "type":"keyword"
     ,
     "salary":
     "type":"double"
     ,
     "deptno":
     "type":"integer"
     ,
     "hiredate":
     "type":"date"
     
     
     
    

 
成功返回:
"acknowledged":true,"shards_acknowledged":true,"index":"my_index"

 GET _all/   查看所有索引
 GET _all/_settings   查看索引配置

创建索引时如果503(master_not_discovered_exception)
删除集群各节点下的data下的数据
rm -rf  /usr/elasticsearch/data/*
重启集群
    
2、修改索引
PUT /my_index/_settings

  "number_of_replicas": 1

"acknowledged":true

3、删除索引

DELETE /my_index    //删除单个索引
DELETE /index_one,index_two  //删除多个索引
DELETE /index_*   //删除以index_开头的索引
DELETE /_all    //删除所有索引
    "acknowledged":true
可以设置下面的属性,使DELETE /_all 失效,必须指定索引名称,才可以删除。
elasticsearch.yml
action.destructive_requires_name: true

数据管理:
1,插入数据
指定ID插入:
post 192.168.23.30:9200/my_index/my_doc/1

“my_field”:“aaa”

返回:
"_index":"my_index","_type":"my_type","_id":"1","_version":1,"result":"created","_shards":"total":1,"successful":1,"failed":0,"_seq_no":0,"_primary_term":1
     不指定ID插入:

 
返回:
"_index":"my_index","_type":"my_type","_id":"s40HiGwBg5JLnGO8RVwg","_version":1,"result":"created","_shards":"total":1,"successful":1,"failed":0,"_seq_no":1,"_primary_term":1
2,查询数据:
   查询所有
     /index_hr/_search   注意传递的参数	

带参数查询:
  get  192.168.23.30:9200/index_hr/_search?q=ename:lisi

  指定id查询:
     get  192.168.23.30:9200/index_hr/emp_type/2

3,更新数据
根据ID更新

post 192.168.182.66:9200/index_hr/emp_type/1

   自动生成ID更新
post   192.168.23.30:9200/my_index/my_type/s40HiGwBg5JLnGO8RVwg

4 ,删除数据
根据id删除

delete 192.168.182.66:9200/index_hr/emp_type/1
再次查询
“_index”:“my_index”,“_type”:“my_type”,“_id”:“s40HiGwBg5JLnGO8RVwg”,“found”:false

3.7 springboot整合es
pom.xml(springboot版本不使用最新的 建议:2.1.6.RELEASE)


org.springframework.boot
spring-boot-starter-data-elasticsearch

  application.properties 配置:

spring.data.elasticsearch.cluster-name=my-application
#9200 http请求端口
#9300 java 链接es的端口
spring.data.elasticsearch.cluster-nodes=192.168.23.81:9300

  entity:

package com.aaa.sbm.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.util.Date;

/**

  • fileName:Order

  • description:

  • author:zz

  • createTime:2019/8/16 9:39

  • version:1.0.0
    */
    @Document(indexName =“index_order”,type = “order_type”,shards = 3,replicas = 1)
    public class Order

    @Id
    private long id;
    private String orderNo;
    private String orderName;
    private String orderTime;
    private Integer customId;

    public long getId()
    return id;

    public void setId(long id)
    this.id = id;

    public String getOrderNo()
    return orderNo;

    public void setOrderNo(String orderNo)
    this.orderNo = orderNo;

    public String getOrderName()
    return orderName;

    public void setOrderName(String orderName)
    this.orderName = orderName;

    public String getOrderTime()
    return orderTime;

    public void setOrderTime(String orderTime)
    this.orderTime = orderTime;

    public Integer getCustomId()
    return customId;

    public void setCustomId(Integer customId)
    this.customId = customId;

    @Override
    public String toString()
    return “Order” +
    “id=” + id +
    “, orderNo='” + orderNo + ‘’’ +
    “, orderName='” + orderName + ‘’’ +
    “, orderTime=” + orderTime +
    “, customId=” + customId +
    ‘’;

dao:
package com.aaa.sbm.esdao;

import com.aaa.sbm.entity.Order;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

/**

  • fileName:OrderEsDao
  • description:
  • author:zz
  • createTime:2019/8/16 9:53
  • version:1.0.0
    */
    public interface OrderEsDao extends ElasticsearchRepository<Order,Long>

service:

package com.aaa.sbm.service;

import com.aaa.sbm.entity.Order;

import java.util.List;

/**

  • fileName:OrderService

  • description:

  • author:zz

  • createTime:2019/8/16 9:59

  • version:1.0.0
    */
    public interface OrderService

    /**

    • 带参查询order列表
    • @param param
    • @return
      */
      List getList(String param,int type);

    /**

    • 向索引中添加数据
    • @param order
    • @return
      /
      int save(Order order);
      /
      *
    • 向索引中修改数据
    • @param order
    • @return
      /
      int update(Order order);
      /
      *
    • 向索引中删除数据
    • @id
    • @return
      */
      int delete(long id);

package com.aaa.sbm.service;

import com.aaa.sbm.entity.Order;
import com.aaa.sbm.esdao.OrderEsDao;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**

  • fileName:OrderServiceImpl

  • description:

  • author:zz

  • createTime:2019/8/16 10:29

  • version:1.0.0
    */
    @Service
    public class OrderServiceImpl implements OrderService

    @Autowired
    private OrderEsDao orderEsDao;

    @Override
    public List getList(String param,int type)

     QueryBuilder queryBuilder = null;
     if(type==0)
         //查询所有
         queryBuilder = QueryBuilders.matchAllQuery();
     else if(type==1&&!StringUtils.isEmpty(param)) //查询匹配的单个列的值
         //类似于mybatis中   orderName =#param
         queryBuilder = QueryBuilders.matchQuery("orderName",param);
     else if(type==2&&!StringUtils.isEmpty(param))//查询order中所有为字符串的匹配值
         // 类似于mybatis中   (orderNo =#param  or orderName =#param)
         queryBuilder = QueryBuilders.multiMatchQuery(param,"orderNo","orderName",);
     else if(type==3&&!StringUtils.isEmpty(param))//单列模糊查询
         //类似于mybatis中   orderName like '%$param%'
         queryBuilder = QueryBuilders.wildcardQuery("orderName","*"+param+"*");
     
     //获取order对象迭代集合
     Iterable<Order> search = orderEsDao.search(queryBuilder);
     //返回迭代器
     Iterator<Order> iterator =   search.iterator();
     //定义返回对象
     List<Order>  orders = new ArrayList<>();
     //迭代对象
     while(iterator.hasNext())
         orders.add(iterator.next());
     
     return orders;
    

    @Override
    public int save(Order order)
    //向es中存储对象
    Order rorder = orderEsDao.save(order);
    if(rorder!=null)
    return 1;
    return 0;

    @Override
    public int update(Order order)
    //向es中存储对象
    Order rorder = orderEsDao.save(order);
    if(rorder!=null)
    return 1;
    return 0;

    @Override
    public int delete(long id)
    try
    orderEsDao.deleteById(id);
    return 1;
    catch (Exception e)
    e.printStackTrace();

    return 0;

controller:
package com.aaa.sbm.controller;

import com.aaa.sbm.entity.Order;
import com.aaa.sbm.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**

  • fileName:OrderController

  • description:

  • author:zz

  • createTime:2019/8/16 10:59

  • version:1.0.0
    */
    @RestController
    public class OrderController

    @Autowired
    private OrderService orderService;

    /**

    • es的order 索引查询
    • @param name
    • @param type
    • @return
      */
      @RequestMapping(“orderList”)
      public Object list(@RequestParam(required = true,defaultValue =“”) String name,@RequestParam(required = true,defaultValue =“0”) Integer type)
      return orderService.getList(name,type);

    /**

    • order索引添加
    • @param order
    • @return
      */
      @RequestMapping(“orderAdd”)
      public Object add(Order order)
      return orderService.save(order);

    /**

    • order索引更新
    • @param order
    • @return
      */
      @RequestMapping(“orderUpdate”)
      public Object update(Order order)
      return orderService.save(order);

    /**

    • order索引值的删除
    • @param id
    • @return
      */
      @RequestMapping(“orderDelete”)
      public Object delete(Long id)
      return orderService.delete(id);

启动类:
package com.aaa.sbm;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;

@SpringBootApplication
@MapperScan(“com.aaa.sbm.dao”)
@EnableElasticsearchRepositories(“com.aaa.sbm.esdao”)
public class SpringbootMabatisApplication

public static void main(String[] args) 
    SpringApplication.run(SpringbootMabatisApplication.class, args);

测试
http://localhost:8888/orderList
//查询时,参数为小写
http://localhost:8888/orderList?name=orderb&type=1
http://localhost:8888/orderList?name=ord10002&type=2
http://localhost:8888/orderList?name=orderb&type=3

http://localhost:8888/orderAdd?id=4&orderNo=ord100022&orderName=orderaa&orderTime=2019-08-16&customId=2

http://localhost:8888/orderUpdate?id=4&orderNo=ord100022&orderName=orderaa&orderTime=2019-08-16&customId=2

http://localhost:8888/orderDelete?id=4

4,知识点总结
5,本章面试题

全文搜索引擎(代码片段)

...索引擎https://www.cnblogs.com/liuge36/p/10028348.html全文搜索引擎Elasticsearch写在前面最近在学Elasticsearch,我相信只要是接触过开发的都会听过Elasticsearch或ELK这么一个技术。主要用来做全文检索或大数据分析等,之前一直处理了解状态。... 查看详情

基于elasticsearch实现站内全文搜索

...og.csdn.net/weixin_44671737/article/details/114456257摘要1技术选型1.1ElasticSearch1.2springBoot1.3ik分词器2环境准备3项目架构4实现效果4.1搜索页面4.2搜索结果页面5具体代码实现5.1全文检索的实现对象5.2客户端配置5.3业务代码编写5.4对外接口5.5页... 查看详情

全文搜索之mysql与elasticsearch搜索引擎

...能都不太成熟,主要适用于小项目,大项目还是建议使用elasticsearch来做全文搜索。ElasticSearch是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据,以下简称ES。Elast... 查看详情

关于全文搜索elasticsearch中matchquery和termquery的区别

...索。term就是单个词,不做分词,直接搜索,精确匹配。elasticsearch官网上应该有很详细的说明啊,花点时间看看啊。参考技术AmatchQuery是带分词功能的全文搜索而termQuery是不带分词功能的精准匹配什么意思呢matchQuery会分析词语比... 查看详情

elk:开源搜索与分析技术栈

...搜索与分析技术栈(1)一、ELK技术栈简介1.ELK技术栈简介Elasticsearch:Elasticsearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎ApacheLucene基础上的搜索引擎,使用J... 查看详情

elk:开源搜索与分析技术栈

...搜索与分析技术栈(1)一、ELK技术栈简介1.ELK技术栈简介Elasticsearch:Elasticsearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎ApacheLucene基础上的搜索引擎,使用J... 查看详情

elk:开源搜索与分析技术栈

...搜索与分析技术栈(1)一、ELK技术栈简介1.ELK技术栈简介Elasticsearch:Elasticsearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎ApacheLucene基础上的搜索引擎,使用J... 查看详情

elasticsearch搜索入门技术之一(代码片段)

1,课程回顾2,本章重点什么是全文检索,常用全文检索框架的基本原理是什么es是什么,主要使用场景es分布式搜索引擎集群的搭建3,具体内容3.1全文检索3.1.1数据分类我们生活中的数据总体分为三种:结... 查看详情

elasticsearch搜索入门技术之一(代码片段)

1,课程回顾2,本章重点什么是全文检索,常用全文检索框架的基本原理是什么es是什么,主要使用场景es分布式搜索引擎集群的搭建3,具体内容3.1全文检索3.1.1数据分类我们生活中的数据总体分为三种:结... 查看详情

全文搜索引擎elasticsearch

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、StackOverflow、Github都采用它。Elastic的底层是开源库 Lucene。但是,... 查看详情

elasticsearch:深入理解elasticsearch查询:过滤器查询vs全文搜索(代码片段)

如果我必须用一句话来描述Elasticsearch,我会这样说:当搜索遇到大规模分析时(近乎实时)Elasticsearch是目前最受欢迎的10大开源技术之一。公平地说,它包含许多本身并不独特的关键功能,但是,结合... 查看详情

全文搜索引擎elasticsearch还是solr?

...文搜索为什么要用全文搜索搜索引擎Lucene,Solr,ElasticSearch?LuceneSolrElasticSearchElasticsearchvsSolr的选择历史比较特征差异比较综合比较总结最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索Solr&#... 查看详情

全文搜索引擎elasticsearch还是solr?

...文搜索为什么要用全文搜索搜索引擎Lucene,Solr,ElasticSearch?LuceneSolrElasticSearchElasticsearchvsSolr的选择历史比较特征差异比较综合比较总结最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索Solr&#... 查看详情

elasticsearch中如何获取全文搜索的词频

】elasticsearch中如何获取全文搜索的词频【英文标题】:Howtogetthewordfrequencyoffull-textsearchinelasticsearch【发布时间】:2022-01-2406:20:36【问题描述】:我有几个这样的文件:text:"hello,Iamyourfriend"text:"hello,hello"text:"everybodysaid:hellohello"在全... 查看详情

PostgreSQL(全文搜索)与 ElasticSearch

】PostgreSQL(全文搜索)与ElasticSearch【英文标题】:PostgreSQL(FullTextSearch)vsElasticSearch【发布时间】:2020-03-0718:54:20【问题描述】:您好,在将搜索功能应用到我的服务之前,我正在做一些研究。我目前使用PostgreSQL作为我的主要存... 查看详情

全文搜索引擎elasticsearch介绍

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、StackOverflow、Github都采用它。Elastic的底层是开源库 Lucene。但是,... 查看详情

深入研究查询elasticsearch,过滤查询和全文搜索

...何了解缺少哪些官方文件如果我不得不用一个短语来描述Elasticsearch,我会说:目前,Elasticsearch在十大最受欢迎的开源技术中。公平地说,它结合了许多本身并不独特的关键功能,但是,当结合使用时,它可以成为最佳的搜索引... 查看详情

elasticsearch结构化搜索全文

  1、介绍    上篇介绍了搜索结构化数据的简单应用示例,现在来探寻 全文搜索(full-textsearch) :怎样在全文字段中搜索到最相关的文档。    全文搜索两个最重要的方面是:    相关性(Relevance) ... 查看详情