ElasticSearch全文检索&Spring Data

本文详细介绍了ElasticSearch的安装、启动、相关概念及编程操作,包括索引、映射、文档的增删改查。还探讨了Spring Data如何与ElasticSearch集成,简化操作。通过实例展示了如何进行查询、分页、排序和高亮显示,以及RESTFul API的使用。
摘要由CSDN通过智能技术生成

Elasticsearch简介

ElaticSearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

Elasticsearch的安装与启动

笔者开发环境使用的是1.8JDK版本;
在这里插入图片描述
Elasticsearch版本为5.6.8,分词器使用IK分词器,请自行下载。
在这里插入图片描述

安装es和ik分词器

注意安装目录不要有中文和特殊字符,笔者将其放在磁盘根目录下。并将分词器解压放入plugins目录并重命名为ik,修改配置文件并创建停用词和自定义词条文件。
安装ik分词器
配置自定义分词及停用词汇
创建相应的dic文件
准备完毕后启动es,如果闪退请降低配置内存,
配置jvm启动内存
正常启动后浏览器访问本地9200端口,出现如下界面说明安装成功。
在这里插入图片描述
在这里插入图片描述

安装es图形化界面–>elasticsearch-head-master

解压elasticsearch-head-master,同样放到了磁盘根目录。
在这里插入图片描述
需要提前准备node.js环境,笔者用的版本为8.9.4
在这里插入图片描述
然后安装grunt构建工具,在head目录启动dos窗口,在命令提示符下输入命令:

grunt server

解决跨域访问
修改elasticsearch/config下的配置文件:elasticsearch.yml,增加以下三句命令:

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    network.host: 127.0.0.1

重启Elasticsearch。
本地访问9100端口,出现以下页面说明安装成功,至此所有准备工作完成。
在这里插入图片描述
在这里插入图片描述

ElasticSearch相关概念(术语)

Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储(store),还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

  • 索引index:一个索引就是一个拥有几分相似特征的文档(记录[数据])的集合。类似于database
  • 类型type:在一个索引中,你可以定义一种或多种类型。类似table
  • 文档document:一个文档是一个可被索引的基础信息单元,类似于一条记录
  • 域field:对文档数据根据不同属性进行的分类标识,类似于字段
  • 映射mapping:指定field的类型和属性。

Elasticsearch编程操作

搭建工程

工程坐标:

	<groupId>pers.buyusan</groupId>
    <artifactId>elasticsearch-day1-demo1</artifactId>
    <version>1.0-SNAPSHOT</version>

添加依赖:

		<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.6.8</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.24</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

代码全部在测试类中进行:
在这里插入图片描述
提取公共部分:

	private TransportClient client;
    @Before
    public void setUp() throws Exception{
   
        //不使用集群,创建TransprotClient对象
        client = new PreBuiltTransportClient(Settings.EMPTY);

        //配置连接信息,ip+端口
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300));
    }
    @After
    public void close(){
   
        //关闭资源
        client.close();
    }

创建索引

只创建索引:

client.admin().indices().prepareCreate("buyusanjrs").get();

执行结果:
在这里插入图片描述

删除索引

删除名称为“buyusanjrs”的索引:

client.admin().indices().prepareDelete("buyusanjrs").get();

创建映射(基于jsonBuilder)

创建索引后如果不创建映射,es会根据默认根据文档的数据来创建。
如果需要指定ik分词器,则需要手动创建映射。
可以通过jsonBuilder对象来创建映射。

        XContentBuilder builder = XContentFactory.jsonBuilder();
        builder.startObject()
                .startObject("article")
                    .startObject("properties")
                        .startObject("id")
                            .field("type","long")
                        .endObject()
                        .startObject("title")
                            .field("type","string")
                            .field("store","false")
                            .field("analyzer","ik_smart")
                        .endObject()
                        .startObject("content")
                            .field("type","string")
                            .f
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值