概述

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

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

下面展示了在关系型数据库中和ElasticSearch中对应的存储字段:

Relational DB -> Databases -> Tables -> Rows -> Columns

Elasticsearch -> Indices -> Types -> Documents -> Fields

这里的索引和传统的关系型数据库中索引有些不同,在ElasticSearch中,一个索引就像是传统关系型数据库中的数据库。

在ElasticSearch和Lucene中,使用的是一种叫倒排索引的数据结构加速检索。

安装使用

由于机器有限,所以我采用的是使用虚拟机安装ElasticSearch。

实验环境如下:

  • VMware虚拟机
  • centos6.5系统
  • JDK1.8
  • ElasticSearch 5.2.2

下载与安装

可以在ElasticSearch官网下载最新版的ElasticSearch。

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

如果使用Windows则下载zip包,使用linux则下载tar.gz包。

安装之前需要安装JDK1.7以上版本。

在Windows下方法比较简单,解压zip包后,通过DOS命令行切换到bin目录,运行elasticsearch即可,可以通过查看localhost:9200端口,看是否启动成功。

在Linux中安装与使用

在linux中新建一个目录,名字为elasticsearch,使用Xftp或者WinSCP等工具将刚才下载的安装包传输到该目录下。

tar -zxvf elasticsearch-5.2.2.tar.gz解压文件。

进入到解压后的文件,输入.bin/elasticsearch即可打开elasticsearch。

可能出现的问题:

  • 启动失败可能是因为使用了root用户,启动不允许使用root用户
  • 启动失败其他原因,可能linux系统中有些参数需要修改修改,比如最大虚拟内存、用户最大可创建线程数,按照提示进行修改即可,具体设置地点可在网上查找。
  • linux防火墙的9200端口需要打开,否则在主机上无法访问虚拟机里的ElasticSearch,可以通过ifconfig命令查询Linux主机的ip地址。
  • 如果还是无法访问,可以进入ElasticSearch目录中的config目录中,vim elasticsearch.yml

    ,编辑设置文件,将host改为0.0.0.0,保存并重启ElasticSearch,就应该没问题了。

访问 ip + 9200,结果如下,ElasticSearch开启成功。

安装elasticsearch-head

elasticsearch-head是一个很好的管理工具,可以可视化看到集群的状况。

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

在elasticsearch5.0后,废弃了使用plugin安装的方式,可以使用git先clone代码,使用npm安装。

访问 ip + 9100,记得开放端口。

在chrome或者火狐浏览器中可能会出现跨域问题而无法连接,可以使用IE连接。

基本使用

在官网可以查看使用多种语言的API,在这里使用最简单的基于HTTP协议的API,使用JSON格式数据。

插入数据

在linux中,输入:

curl -XPUT 'http://192.168.91.129:9200/website/blog/1' -d '{"title":"liuyang", "text":"太阳在头顶之上", "date":"2017-4-16"}'

这样就可以插入一条数据,在插入多条数据后,在浏览器输入:

http://192.168.91.129:9200/_search?pretty

在结果中可以看到有多条记录。pretty的作用是为了让JSON优化排版,也可以直接使用curl -XGET获取数据。

搜索

查询字符串

在浏览器输入:

http://192.168.91.129:9200/_search?q=太阳

在q后面加上自己想要查找的字符串,就可以进行匹配了。

_score字段为匹配程度,越高的结果就会越在前面。

格式化结果后:

{
"took": 292,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.56008905,
"hits": [
{
"_index": "website",
"_type": "blog",
"_id": "2",
"_score": 0.56008905,
"_source": {
"title": "title2",
"text": "小路弯弯,太阳正在头顶上",
"date": "2017-4-16"
}
},
{
"_index": "website",
"_type": "blog",
"_id": "3",
"_score": 0.5446649,
"_source": {
"title": "title3",
"text": "最美的太阳",
"date": "2017-4-16"
}
},
{
"_index": "website",
"_type": "blog",
"_id": "1",
"_score": 0.48515025,
"_source": {
"title": "liuyang",
"text": "太阳在头顶之上",
"date": "2017-4-16"
}
}
]
}
}

全文搜索

在linux中输入:

curl -XGET 'http://192.168.91.129:9200/_search' -d '{"query":{"match":{"text":"太阳"}}}'

后面的JSON为搜索的具体field,这样就可以做到在关系型数据库中很难做到的全文检索。

从输出结果中可以看到,每一个document都有对应的_score字段,这就是对此document的相关性评分。

格式化输出:

{
"took": 44,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.5716521,
"hits": [
{
"_index": "website",
"_type": "blog",
"_id": "1",
"_score": 0.5716521,
"_source": {
"title": "liuyang",
"text": "太阳在头顶之上",
"date": "2017-4-16"
}
},
{
"_index": "website",
"_type": "blog",
"_id": "3",
"_score": 0.5649868,
"_source": {
"title": "title3",
"text": "最美的太阳",
"date": "2017-4-16"
}
},
{
"_index": "website",
"_type": "blog",
"_id": "2",
"_score": 0.48515025,
"_source": {
"title": "title2",
"text": "小路弯弯,太阳正在头顶上",
"date": "2017-4-16"
}
}
]
}
}

通过对比两种搜索方式的结果可知,使用全文搜索的匹配更加满足我们的预期。

初识ElasticSearch的更多相关文章

  1. 搜索引擎 ElasticSearch 之 步步为营1 【环境搭建&初识ElasticSearch】

    1.下载ElasticSearch a.下载Java环境JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...

  2. 【分布式搜索引擎】初识Elasticsearch

    一.Elasticsearch是什么? Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎. Elasticsearch是一个实时分布式搜索和分析引擎.它让你以前所未 ...

  3. 初识Elasticsearch,bulk 操作的遇到的那些事

    bulk api可以在单个请求中一次执行多个文档的 create . index . update 或 delete 操作 批量操作的行为(action)必须是以下几种: 行为 解释 create 当 ...

  4. 初识 ElasticSearch

    场景:最近有同事分享了ElasticSearch Inverted Index,所以自己也了解一下基于Lucene的ES. 转载自:http://www.jianshu.com/p/05cff7175 ...

  5. 【原创】《从0开始学Elasticsearch》—初识Elasticsearch

    目录 1. Elasticsearch 是什么2. Elasticsearch 中基本概念3. Elasticsearch 安装4. 访问 Elasticsearch 1. Elasticsearch ...

  6. Elasticsearch系列---初识Elasticsearch

    Elasticsearch是什么? Elasticsearch简称ES,是一个基于Lucene构建的开源.分布式.Restful接口的全文搜索引擎,还是一个分布式文档数据库.天生就是分布式.高可用.可 ...

  7. 【ELK学习】初识ElasticSearch

    ES(elasticsearch) 是一个高可扩展的.开源的全文检索和分析引擎,它允许你存储.检索.分析海量数据,以一种快到近乎实时的速度. ES用例场景: 使用ES存储商品目录.清单,提供检索.输入 ...

  8. 搜索引擎 ElasticSearch 之 步步为营 【主目录】

    ElasticSearch 是一款著名的分布式搜索引擎框架,采用Java编写.具有搜索速度快,实时搜索等特色. 以下为官网对ElasticSearch的介绍: Elasticsearch 是一款高可伸 ...

  9. Elasticsearch 教程--入门

    1.1 初识 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架. 但是 L ...

随机推荐

  1. canvas随笔

    公司刚刚处于创业初期,总是会尝试着做一些新奇的东西.尤其是对于网上一些好玩的东西,总是希望自己也能有一样的功能.不得不说,对于我来说,既是种机遇,也是种挑战.因为这样给了我足够的发展空间,可以按着自己 ...

  2. 1627: [Usaco2007 Dec]穿越泥地

    1627: [Usaco2007 Dec]穿越泥地 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 504  Solved: 325[Submit][Sta ...

  3. netflix zuul-simple-webapp.war在tomcat下启动

    按照netflix 在github 的wiki的文档使用 gradlew jettyRun 可以启动jetty来进行测试. 在本地build war 以后,我放在tomcat 运行的时候,却不可以运行 ...

  4. 用ajax实现不刷新分页

    今天我们要用ajax做一个分页: 实现Ajax分页: 如果可以的话加上查询条件 找一张表做分页 分页不使用page类 页面不用刷新 Ajax加载数据 <!doctype html> < ...

  5. 一种抛弃GPS的中近距离高精度无线同步新方案

    目前,对于需要做同步数据采集的项目,大家不约而同的选用GPS作同步源,用GPS的秒脉冲作同步基准.对于是1000米内的多采集点的应用来说,这是一种浪费. 目前福州慧聚通信技术有限公司推出一款无线同步数 ...

  6. HTTP协议&SOCKET协议

    一. HTTP协议是什么? 我们在浏览器的地址栏里输入的网站地址叫做 URL(UniformResourceLocator,统一资源定位符).就像每家每户都有一个门牌地址一样,每个网页也都有一个Int ...

  7. PHP语言开发微信公众平台(订阅号)之开启基本功能及获得可用的服务器地址(2)

    1.开启群发功能(单击功能菜单里的"群发功能",并在右侧页面中点击"同意以上声明") 2.(1)在开启开发者模式之前需要完善个人资料(完成头像上传即可) (2) ...

  8. 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法

    对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没有重写 hashCode 方法,那么下面的代码示例会输出 null 我们首先定义一个对象:BmapPoint, ...

  9. java实现微信红包分配算法

    红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...

  10. .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件

    asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题  开发环境:ubuntu+vscode 1.导入所需要的包:n ...