elasticsearch

elasticsearch

声明:原教程视频链接

1、什么是elasticsearch

百度百科:elasticsearch是一个基于lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。elasticsearch是用Java语言开发的,并作为Apache许可条款下的源码发布,是一种流行的企业级搜索引擎。

elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、net、PHP、python、等其他语言都是可用的。根据DB-Engines的排名显示,elasticsearch是最受欢迎的企业搜索引擎,其次是Apache solr,也是基于lucene。

基本概念

elasticsearch基本概念

2、elasticsearch和solr的区别

solr 简介

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化

Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。

elasticsearch和solr的区别

(1)es基本是开箱即用,非常简单。Solr安装略微复杂一丢丢,可关注(solr6.6教程-基础环境搭建(一)

(2)Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。

(3)Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。

(4)Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑

(5)Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用; ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索. Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

(6)Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。

3、elasticsearch下载安装

条件:电脑Java环境需Java1.8及以上

下载地址:https://www.elastic.co/cn/downloads/elasticsearch

解压

目录结构及作用

bin							#启动文件
config						#配置文件
	elasticsearch.yml 		#elasticsearch配置文件,默认9200端口
	jvm.options				#java虚拟机相关配置
	log4j2.properties		#日志配置文件
lib							#相关jar包
logs						#日志输出文件夹
modules						#功能模块
plugins						#插件

启动:

打开jvm.options配置文件,修改jvm占用内存大小(elasticsearch默认是1G,电脑内存足够大可以忽视)

在这里插入图片描述

在这里插入图片描述

打开bin目录,点击elasticsearch.bat右键以管理员身份运行

在这里插入图片描述

打开浏览器访问:127.0.0.1:9200

在这里插入图片描述

3.1、安装可视化界面elasticsearch-head

条件:电脑需安装node.js npm

下载地址:https://github.com/mobz/elasticsearch-head

解压

进入解压后的目录文件,打开命令窗口,安装依赖
在这里插入图片描述

启动:

npm run start

在这里插入图片描述

访问:localhost:9100

在这里插入图片描述

无法连接elasticsearch,产生跨域

解决:

关闭elasticsearch,打开elasticsearch.yml,输入:

http.cors.enabled: true 
http.cors.allow-origin: "*"

保存,重新启动elasticsearch

在这里插入图片描述

成功连接

4、安装kibana

了解 ELK

ELK是ElasticSearch、Logstash、Kibana三大开源框架首字母大写简称。
ElasticSearch是基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。
Logstash是ELK的重要数据流引擎,用于从不同目标(文件 / 数据存储 / MQ)收集的不同格式数据,经过过滤后支持输出到不同的目的地(文件 / MQ / redis /elesticsearch / kafka等)。
Kibana 可以将elasticsearch的数据通过友好页面战术出来,提供实时分析功能。
市面上很多开发只要提到ELK能够一直说出它说一个日志分析架构技术栈总称,但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据收集和分析的场景,日志分析和收集只是更具有代表性,并非唯一性。

img

下载地址:https://www.elastic.co/cn/kibana

解压

打开bin文件目录,以管理员身份运行kibana.bat

在这里插入图片描述

访问:http://localhost:5601

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TlxmnES-1615212698824)(C:\Users\黄彬\AppData\Roaming\Typora\typora-user-images\image-20210301164526481.png)]

4.1、使用kibana对elasticsearch进行基本操作
创建一个索引
PUT /索引名/~类型~/id
{
    请求体
}
PUT /test2
{
  "mappings": {						#定义规则
    "properties": {					#定义属性
      "name": {						
        "type": "text"				#属性类型
      },
      "age": {
        "type": "integer"
      },
      "sex": {
        "type": "short"
      }
    }
  }
}

在这里插入图片描述

修改文档
POST /test1/type1/1/_update
{
  "doc": {
    "age": "24"
  }
}

在这里插入图片描述

注意:索引名称字母必须全部小写,否则会报错。
在这里插入图片描述

删除

根据命令实现删除索引还是删除文档

DELETE /test1

在这里插入图片描述

获取数据

先创建一些数据

PUT /test2/_doc/1
{
  "name": "bin",
  "age": "23",
  "sex": "1"
}

PUT /test2/_doc/2
{
  "name": "haung",
  "age": "24",
  "sex": "1"
}

PUT /test2/_doc/3
{
  "name": "ling",
  "age": "23",
  "sex": "0"
}

在这里插入图片描述

GET /test2/_doc/1

在这里插入图片描述

GET /test2/_doc/_search?q=name:bin

在这里插入图片描述

5、复杂查询

term、terms查询

term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword、numeric、date等明确值的

term:查询某个字段里含有某个关键词的文档
terms:查询某个字段里含有多个关键词的文档

GET /test2/_doc/search
{
	"query": {
		"term": {
			"name": "bin"
		}
	}
}
GET /test2/_doc/search
{
	"query": {
		"terms": {
			"name": [
				"huang",
				"bin"
			]
		}
	}
}
fuzzy实现模糊查询

value:查询的关键字
boost:查询的权值,默认值是1.0
min_similarity:设置匹配的最小相似度,默认值0.5,对于字符串,取值0-1(包括0和1);对于数值,取值可能大于1;对于日期取值为1d,1m等,1d等于1天
prefix_length:指明区分词项的共同前缀长度,默认是0

GET /test2/_doc/_search/
{
   
  "query": {
    "fuzzy": {
      "name": {
        "value": "huan"
      }
    }
  } 
}
GET /test2/_doc/_search
{
  "query": {
    "match": {					#匹配属性name包含bin的文档,会使用分词器
      "name": "bin"
    }
  },
  "_source": ["name", "sex"],	#只显示name和sex属性
  "sort": [
      {
        "age": {				#按照age属性实现降序排序查询
          "order": "asc"
        }
      }
    ],
  "from": 0,					#从第几开始查询
  "size": 1						#查询大小为多少,应用于分页查询
}
GET /test2/_doc/_search
{
  "query": {
    "bool": {							#查询结果返回布尔值
      "must": [							#类似MySQL的and,而MySQL中的or相当于这里的should,not相当于must_not
        {
          "match": {
          "name": "huang"
          }
        },
        {
          "match": {
          "sex": "1"
          }
        }
      ],
      "filter": {						#过滤条件
        "range": {
          "age": {
            "lt": 10					#gt->大于;gte->大于等于;lt->小于;lte->小于等于
          }
        }
      }
    }
  }
}

6、spring boot集成elasticsearch

创建spring boot项目,加入elasticsearch依赖

在这里插入图片描述

更换elasticsearch版本,和服务器一致

在这里插入图片描述

<elasticsearch.version>7.6.1</elasticsearch.version>
编写配置类,设置连接条件和注入bean
@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("127.0.0.1", 9200, "http")));
        return client;
    }
}

测试
@Autowired
private RestHighLevelClient restHighLevelClient;

@Test
public void testEs() throws IOException {
	//创建索引请求
	CreateIndexRequest request = new CreateIndexRequest("test3");
	//执行请求
	CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
		System.out.println(response.toString());
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值