Elasticsearch

Elasticsearch总结

1:项目结构

 

 

 

 

2.介绍

         2.1 什么是elasticsearch

                   它是一个天生的实时的分布式搜索和分析引擎。他可以处理大规模的数据,在大规模的搜索时相比solr的效率高性能好,不需要借助外部插件来完成分布式搜索功能。是一个基于lucene的搜索服务器。基于restful web接口,它是用java语言开发的,能达到实时搜索,稳定、可靠、快速、安装使用方便等优势。

                   注释:实时搜索(多次搜索的结果动态变化,不局限于静态数据的搜索)

         2.2 elasticsearch的特点

(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公

司;也可以运行在单机上

(2)将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;

(3)开箱即用的,部署简单

(4)全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理

3.基本概念

         3.1索引(一般称索引库,类比关系型数据库的数据库)

         3.2类型(类比关系型数据库中的表)

         3.3文档(类比数据库中的行)

 

4.postman调用restAPI

         4.1创建索引

例如我们要创建一个叫articleindex的索引 ,就以put方式提交

注意无需添加body数据

http://127.0.0.1:9200/articleindex/

         4.2新建文档

以post方式提交 http://127.0.0.1:9200/索引名称/类型(文档名称)

Body需要添加json数据(类比添加文档下的字段及内容)

{

         “key”:”value”

}

         4.3查询一个类型(全部文档)

查询某索引某类型的全部数据,以get方式请求

http://127.0.0.1:9200/articleindex/article/_search 返回结果如下:

 

                   _id是由系统自动生成的。

4.4修改类型(全部文档)

如果我们在地址中的ID不存在,则会创建新文档

以put形式提交以下地址:

http://192.168.184.134:9200/索引/类型/AWPKrI4pFdLZnId5S_F7

body:

{

         “key”:”value”

}

注意:如果类型有多个数据,修改必须将未修改的数据也写上,否则丢失其他数据。

         4.5_id查询类型的数据

                   GET方式请求

http://192.168.184.134:9200/articleindex/article/1

4.6基本匹配查询(模糊查询*代表0到多个任意字符)

根据某列进行查询 get方式提交下列地址:

http://192.168.184.134:9200/articleindex/article/_search?q=title:titleValue

http://192.168.184.134:9200/articleindex/article/_search?q=title:titleValue*

titleValue可以用使用正则

         4.7删除文档

根据ID删除文档,删除ID为1的文档 DELETE方式提交

http://192.168.184.134:9200/articleindex/article/1

5.Head插件的安装与使用(可视化界面操作ES)

如果都是通过rest请求的方式使用Elasticsearch,未免太过麻烦,而且也不够人性化。我

们一般都会使用图形化界面来实现Elasticsearch的日常管理,最常用的就是Head插件

步骤1:

下载head插件:https://github.com/mobz/elasticsearch-head 

elasticsearch-head-master.zip

步骤2:

解压到任意目录,但是要和elasticsearch的安装目录区别开。

步骤3:

安装node js ,安装cnpm

npm install ‐g cnpm ‐‐registry=https://registry.npm.taobao.org

步骤4:

将grunt安装为全局命令 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所设定的任务

npm install ‐g grunt‐cli

步骤5:安装依赖

cnpm install

步骤6:

进入head目录启动head,在命令提示符下输入命令

grunt server

步骤7:

打开浏览器,访问head插件项目,输入http://localhost:9100

步骤8:

点击连接按钮没有任何相应,按F12发现有如下错误

No 'Access-Control-Allow-Origin' header is present on the requested resource

这个错误是由于elasticsearch默认不允许跨域调用,而elasticsearch-head是属于前端工程,所以报错。

 

我们这时需要修改elasticsearch的配置,让其允许跨域访问。

修改elasticsearch配置文件:elasticsearch.yml,增加以下两句命令:

http.cors.enabled: true

http.cors.allow-origin: "*"

此步为允许elasticsearch跨越访问 点击连接即可看到相关信息

 

 

5.1 Head插件操作

5.1.1 新建索引

选择“索引”选项卡,点击“新建索引”按钮

输入索引名称点击OK

5.1.2 新建或修改文档

在复合查询中提交地址,输入内容,提交方式为PUT

点击数据浏览 ,点击要查询的索引名称,右侧窗格中显示文档信息

点击文档信息:

修改数据后重新提交请求 , ID已经存在,所以执行的是修改操作。

不存在则为添加操作

重新查询此记录,发现版本为2。也就是说每次修改后版本都会增加1.

5.1.3 查询

不点击任何表示查询所有索引的文档,点击谁单独查谁。

 

5.1.4 删除

 

 

 

6.ik分词器

 

默认的中文分词是将每个字看成一个词,这显然是不符合要求的,所以我们需要安装中

文分词器来解决这个问题。

IK分词是一款国人开发的相对简单的中文分词器。虽然开发者自2012年之后就不在维护

了,但在工程应用中IK算是比较流行的一款!我们今天就介绍一下IK中文分词器的使用。

IK提供了两个分词算法ik_smart 和 ik_max_word

其中 ik_smart 为最少切分,ik_max_word为最细粒度划分

http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=搜索关键字

6.4 自定义词库(添加词库)

测试"传智播客",浏览器的测试效果如下:

http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=传智播客

不存在词语,所以单个字都分开了。

所以需要添加额外的词语

步骤

(1)进入elasticsearch/plugins/ik/config目录

(2)新建一个my.dic文件,编辑内容:

传智播客

修改IKAnalyzer.cfg.xml(在ik/config目录下)添加my.dic文件到配置中

重新启动elasticsearch,通过浏览器测试分词效果

 

7.使用java继承Springdate-elasticsearch

         1.导入Spring-date-elasticsearch坐标

         2.编写application.yml配置文件

                   server:

  port: 9007

spring:

  application:

    name: tensquare‐search #指定服务名

  data:

    elasticsearch:

      cluster‐nodes: 127.0.0.1:9300        

         3.dao层接口继承ElasticsearchRepository<对应类,String>接口

         4.在对应类中要添加以下注释

//indexName:数据库(索引)名称,article类型名称
@Document(indexName = "tensquare_article",type = "article")
public class Article implements Serializable {

@Id
private String id;

//是否索引,就看该字段能否被搜索
//是否分词,表示搜索的时候是整体匹配还是单词匹配
//是否存储,就是是否在页面显示
// 使用查询分词器searchAnalyzer = "ik_max_word",要与存的分词器相同
// 使用存储分词器:analyzer ="ik_max_word",指的是存储到关系型数据库
// index = true表示这列是索引

@Field(index = true,analyzer ="ik_max_word",searchAnalyzer = "ik_max_word")

 

         5.在service层可以调用ElasticsearchRepository中默认支持的方法

                   在dao层可以添加jpa规则的方法搜索

                   例如

Page<Article> findByContentOrTitleLike(String title, String content, Pageable pageable);

         6.在controller层

return new Result(true, StatusCode.OK,"搜索成功",
new PageResult<Article>(list.getTotalElements(),list.getContent()));

 

8.注意事项

         在docker启动ES时9300端口默认不可用

进入容器目录:

Docker exec –it +name(或id)

 

         新建一个挂载新文件在docker容器中的容器:

         V 宿主机文件:docker文件

         修改挂载的文件(宿主机的文件)

         将transport.host: 0.0.0.0取消注释,外部即可访问9300端口

 

 

 

 

 

 

 

 

 

 

 

 

 

9. IK分词器安装

(1)快捷键alt+p进入sftp , 将ik文件夹上传至宿主机

sftp> put ‐r d:\setup\ik

(2)在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下。

docker cp ik tensquare_elasticsearch:/usr/share/elasticsearch/plugins/

(3)重新启动,即可加载IK分词器

docker restart tensquare_elasticsearch

 

 

 

 

 

转载于:https://www.cnblogs.com/erfsfj-dbc/p/10773853.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值