抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

ElasticSearch

Windows下安装elasticsearch

在安装Elasticsearch引擎之前,必须安装ES需要的软件环境

注意:安装elasticsearch7.4运行需要jdk11及以上

elasticsearch与jdk有依赖关系

  1. 下载地址

  2. 配置环境变量

img

  1. 测试运行

点击/bin目录下的elasticsearch.bat开始安装

安装elasticsearch的head插件

es5以上版本安装head需要安装node和grunt(之前的直接用plugin命令即可安装)

(一)从地址:https://nodejs.org/en/download/ 下载相应系统的msi,双击安装。
img

(二)安装完成用cmd进入安装目录执行 node -v可查看版本号
img

(三)执行 npm install -g grunt-cli 安装grunt ,安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号
img

(四)开始安装head
① 进入安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码

http.cors.enabled: true

http.cors.allow-origin: “*”

node.master: true

node.data: true

然后去掉network.host: 192.168.0.1的注释并改为network.host: 0.0.0.0,去掉cluster.name;node.name;http.port的注释(也就是去掉#)

elasticsearch-7.1.1 版本 yml文件需要这个 cluster.initial_master_nodes: [“node-1”]

②双击elasticsearch.bat重启es
③在https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip
img

④解压到指定文件夹下,G:\elasticsearch-6.4.1\elasticsearch-head-master 进入该文件夹,修改G:\elasticsearch-6.4.1\elasticsearch-head-master\Gruntfile.js 在对应的位置加上hostname:’*’
img

⑤在G:\elasticsearch-6.6.2\elasticsearch-head-master 下执行npm install 安装完成后执行grunt server 或者npm run start 运行head插件,如果不成功重新安装grunt。成功如下
img

⑥浏览器下访问http://localhost:9100/
img

整合springboot

参考博客 https://segmentfault.com/a/1190000018625101?utm_source=tag-newest

https://blog.csdn.net/chen_2890/article/details/83895646

  1. properties
1
2
3
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.data.elasticsearch.repositories.enabled=true
  1. pom.xml
1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--集合工具包-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
  1. ```java
    /**
     *
     * @Description:matchQuery
     *@Author: https://blog.csdn.net/chen_2890
     */
    @Test
    public void testMathQuery(){
        // 创建对象
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 在queryBuilder对象中自定义查询
        //matchQuery:底层就是使用的termQuery
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","坚果"));
        //查询,search 默认就是分页查找
        Page<Item> page = this.itemRepository.search(queryBuilder.build());
        //获取数据
        long totalElements = page.getTotalElements();
        System.out.println("获取的总条数:"+totalElements);
    
        for(Item item:page){
            System.out.println(item);
        }
    
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22




    ```java
    /**
    * @Description:
    * termQuery:功能更强大,除了匹配字符串以外,还可以匹配
    * int/long/double/float/....
    * @Author: https://blog.csdn.net/chen_2890
    */
    @Test
    public void testTermQuery(){
    NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
    builder.withQuery(QueryBuilders.termQuery("price",998.0));
    // 查找
    Page<Item> page = this.itemRepository.search(builder.build());

    for(Item item:page){
    System.out.println(item);
    }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @Description:布尔查询
* @author: https://blog.csdn.net/chen_2890
*/
@Test
public void testBooleanQuery() {
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder(); builder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title","华为")).must(QueryBuilders.matchQuery("brand", "华为")));
// 查找
Page<Item> page = this.itemRepository.search(builder.build());
for (Item item : page) {
System.out.println(item);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**

* @Description:模糊查询
uthor: https://blog.csdn.net/chen_2890
*/
@Test
public void testFuzzyQuery(){
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(QueryBuilders.fuzzyQuery("title","faceoooo"));
Page<Item> page = this.itemRepository.search(builder.build());
for(Item item:page){
System.out.println(item);
}

}

Elasticsearch-基础介绍及索引原理分析

最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有所帮助。 同时也希望有发现内容不正确或者有疑问的地方,望指明,一起探讨,学习,进步。

介绍

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
  • 实时分析的分布式搜索引擎。
  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

基本概念

先说Elasticsearch的文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:

1
2
3
4
5
6
7
8
{
"name" : "John",
"sex" : "Male",
"age" : 25,
"birthDate": "1990/05/01",
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}

用Mysql这样的数据库存储就会容易想到建立一张User表,有balabala的字段等,在Elasticsearch里这就是一个文档,当然这个文档会属于一个User的类型,各种各样的类型存在于一个索引当中。这里有一份简易的将Elasticsearch和关系型数据术语对照表: