这个世界已然被数据淹没。多年来,我们系统间流转和产生的大量数据已让我们不知所措。 现有的技术都集中在如何解决数据仓库存储以及如何结构化这些数据。 这些看上去都挺美好,直到你实际需要基于这些数据实时做决策分析的时候才发现根本不是那么一回事。

Elasticsearch是一款十分强大的开源搜索引擎,可以帮助你在海量数据中搜索到目标,使用机器学习自动发现异常数据,对数据报表等强大功能。

在大数据的时代,掌握强大的实时搜索和分析能力,才能掌握核心竞争力。

如果你使用过Github的搜索功能,应该会深有体会Elasticsearch的强大,从近百亿代码中快速对你的关键词进行匹配,

相比于Hadoop,ES具有更高的性能,而且很容易进行扩展和安装。

环境搭建

ES需要使用Java的开发环境,所以需要配置JDK环境变量(这个不用多说了吧)。

然后解压ES安装包,在cmd中进入ES的bin目录下,执行elasticsearch.bat即可。

ES使用了9200端口,可以在本地访问localhost:9200来查看。

它会返回当前ES的节点信息。

ES的操作都是基于REST API的,我们可以使用一个可视化工具Kibana。

同样也是解压,然后在bin目录下执行kibana.bat

访问localhost:5601就可以进入管理平台。

索引是文档的容器,存放一类文档的集合,类似于数据库中表的概念,里面存放了一条条的数据。

在开发工具DEV Tool中我们可以操作索引。

文档的CRUD

类似于数据库,ES中也存在了CRUD操作,每一条记录就是一条文档。

操作存在Index,Create,Update,Delete,Read。

Index和Create都是创建一条文档,不过Index的意思是索引(动词),如果文档已存在,就删除现有的,再重新创建,版本增加。Create可以自己制定文档ID,如果ID存在,就会失败,如果不存在,就创建新的文档。

Index和Create请求方式有点绕,最好还是自己在DEV Tool中测试一下。

Update方法必须文档已经存在,对文档字段进行增量更新,添加字段或修改字段内容,并且版本号增加。

Read方法比较简单,只需要用GET请求来指定文档ID即可,如上图。

Delete方法类似于Read,指定文档ID即可。

Elasticsearch分词

ES有一个非常强大的功能,就是内置分词器,支持数十个国家的语言。

Analysis,文本分析,把全文本转化为一系列单词,基于Analyzer实现。

ES中有多种分词器,standard是按词切分,将单词切分成单个token。

simple会根据非字母的单词进行拆分,并进行大小写转换。

whitespace会按照空格来进行拆分,不做其他处理。

stop想必simple Analyzer会把the,is,a等修饰词去除。

keyword会直接把一个输入当做输出来处理。

pattern是通过正则表达式进行分词,默认按照\W非字母的符号进行分割,并进行大小写转换。

Search-API

在ES中使用Search有多种方法,一种是把参数带在URL中使用GET方法请求的URI Search,另一种是把请求参数以JSON格式放在Body中的请求方式。

在search时,需要在URL中使用/_search来请求。

  • URI Search

使用q来指定查询字符串,df指定要查询的字段,不指定df会默认对所有字段进行查询。

sort指定根据哪个字段排序,from和size用于分页,profile可以查看search是如何执行的。

也可以不加df字段,直接使用?q=title:java来指定字段。

q字段查询的条件如果是两个单词,比如说Java Blog,如果要求查询结果中连续的话,就需要在查询时用引号包住。

?q=title:"Java Blog", Java AND Blog。
?q=title:Java Blog, title:Java OR 其他字段:Blog。
?q=title:(Java Blog),title:Java OR title:Blog。
?q=title:(Java -Blog),title:Java OR title:Blog。

  • Request Body Search

Request Body Search可以做比URI Search更高级的操作。

match_all查询所有。

可以使用match进行匹配查询。

如下默认是java or python。

如果要指定and和or条件,可以指定operator。

无限可能,Elasticsearch(一)的更多相关文章

  1. elasticsearch高级配置二----线程池设置

    一个Elasticsearch节点会有多个线程池,但重要的是下面四个: 索引(index):主要是索引数据和删除数据操作(默认是cached类型) 搜索(search):主要是获取,统计和搜索操作(默 ...

  2. Elasticsearch Configuration 中文版

    ##################### Elasticsearch Configuration Example ##################### # This file contains ...

  3. ElasticSearch配置说明

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中. cluster.name: elasticsearch 配置集群名称,默认elasticsearch node ...

  4. ElasticSearch 配置详解

    配置文件位于es根目录的config目录下面,有elasticsearch.yml和logging.yml两个配置,主配置文件是elasticsearch.yml,日志配置文件是logging.yml ...

  5. Elasticsearch分布式搜索集群配置

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置.   所有的配置都可以使用环境变量,例如:node.rack: ${ ...

  6. elasticsearch配置

    配置文件详解1.0版 配置文件位于es根目录的config目录下面,有elasticsearch.yml和logging.yml两个配置,主配置文件是elasticsearch.yml,日志配置文件是 ...

  7. (转)分布式搜索Elasticsearch——配置

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置.         所有的配置都可以使用环境变量,例如: node.r ...

  8. 在 Java 应用程序中使用 Elasticsearch

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  9. Elasticsearch相关配置(二)

    一.关于elasticsearch的基本概念 term 索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...

随机推荐

  1. 搭建Nginx四层反向代理

    需求背景: 前段时间公司因为业务需求需要部署一个正向代理,我已经分享出来了https://www.cnblogs.com/Dfengshuo/p/11911406.html,现有因架构个更改,需要再加 ...

  2. Python Exception处理

    Python中的错误处理分为两类:语法错误和异常处理.语法错误一般是指由于python语句.表达式.函数等存在书写格式活语法规则上的错误抛出的异常,如python常见的缩进控制,若同层次的执行语句存在 ...

  3. java中文件复制的4种方式

    今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数组很大,导致复制后目标文件非常大,其实就是空行等一 ...

  4. centos8 yum 安装 rabbitmq

    进入/etc/yum.repos.d/ 文件夹创建rabbitmq-erlang.repo 文件内容如下[rabbitmq-erlang] name=rabbitmq-erlangbaseurl=ht ...

  5. git 进行版本打标签

    一般给生产环境的代码新包进行打标签,以便查找,发布正式环境的各个不同版本作用,简单来说,就是给包命名,容易区分太多版本啦 获取系统中的所有标签或筛选特定特征的标签 git tag -a tagname ...

  6. js中call、apply、bind到底有什么区别?bind返回的方法还能修改this指向吗?

     壹 ❀ 引 同事最近在看angularjs源码,被源码中各种bind,apply弄的晕头转向:于是他问我,你知道apply,call与bind的区别吗?我说apply与call是函数应用,指定thi ...

  7. Python深拷贝与浅拷贝区别

    可变类型 如list.dict等类型,改变容器内的值,容器地址不变. 不可变类型 如元组.字符串,原则上不可改变值.如果要改变对象的值,是将对象指向的地址改变了 浅拷贝 对于可变对象来说,开辟新的内存 ...

  8. 深蓝词库转换2.6版发布——支持Emoji、颜文字和小鹤双拼

    端午期间,别人在度假,我在家码代码,把深蓝词库转换做了一下版本升级.本次更新主要是2大特性: 1.支持Emoji和颜文字 在源词库中可以选择Emoji. Emoji文件的格式为: Emoji+< ...

  9. Java题库——Chapter2 基础程序设计

    1)Suppose a Scanner object is created as follows: Scanner input = new Scanner(System.in); What metho ...

  10. Set a One-to-Many Relationship设置一对多关系 (EF)

    In this lesson, you will learn how to set a one-to-many relationship between business objects. The C ...