1.elasticsearch的结构

  首先elasticsearch目前的结构为 /index/type/id  id对应的就是存储的文档ID,elasticsearch一般将数据以JSON格式存储。我们可以将elasticsearch和关系型数据库进行比较,index相当于关系型数据库中的database,type相当于table,而id就相当于表中的主键,elasticsearch中一个文档存储的一个json则能视为是关系型数据库中一张表的一行数据,而ID就是他的主键,在理解了es的存储结构后我们就可以对elasticsearch的一些基本使用进行了解了。


2.映射

  elasticsearch在导入数据到索引时会按照固定的模板去导入数据,模板中可以设置字段的数据类型,以及设置数据的分词策略,注意es会在数据导入时就对数据做分词,然后在搜索数据的时候,会按照存入时的分词策略查询数据

{"settings":{
"analysis" : {
"analyzer" : {
"ik" : {
"tokenizer" : "ik_max_word"
}
}
},
"index" : {
"analysis.analyzer.default.type": "ik_max_word"
}
},
"mappings": {
"doc": {
"dynamic": "false",
"properties": {
"brand": {
"type": "string",
"analyzer": "ik_max_word"
},
"product_name": {
"type": "string",
"analyzer": "ik_max_word"
}
}
}
}
}

关于分词,elasticsearch中默认的标准分词器基本只能将一句话只能分成一个个的字,所以我们要用到ik分词器,切记版本问题。

下载地址》》:https://github.com/medcl/elasticsearch-analysis-ik

下载完成直接解压到es的pulgin目录下就行,ik分词器默认有两种分词方式:

  (1) ik_max_word,该模式的分词策略为最大化词汇搜索,既会递归整个词条,将词条中所有的语句列出,允许重复。

  (2) ik_smart,该策略不允许词汇重复,词条中如果有没有匹配到词典的字直接忽略

关于ik分词器这里就不再详细叙述了,有一些关于词典的知识请大家自行百度,这里只对elasticsearch重点讲述!


3.搜索

①query组件

好了,到了正式介绍es的时候,搜索引擎不用多说搜索肯定是最重要的一点,下面给出一个最简单的例子

  首先看到 红色箭头1 ,整个语句意思从前至后 分别为 GET 方式对es请求, /catalogue 为请求的索引地址,可以具体到/type甚至id,/_search代表发起查询请求,而后面的则是请求的json体,毫无疑问json体是搜索的关键也是今天的主要讲解内容。

再看到红色剪头2,es中所有的查询都要包含在query组件中,query后面则跟着一个JSON,JSON的内容也就是红色剪头3,match_all代表无条件的查询即搜索所有,同样的还有match代表有条件的查询,查询条件放在match后面的json中,记住整个查询体都按照json格式来写。

如上队商品名进行查询,查出所有名字包含洗衣粉的商品,搜索结果如下:

可以看到返回hits的其实是个json数组,每个json中包含着该数据的index、type、id以及匹配的分数_score以及数据_source

好了,这样就介绍完了最基本的单条件搜索

②bool组件

上面是单条件查询,那么多条件怎么查询呢,可以看到如下图:

可以看到直接在query里面是不能进行多条件查找的,这里需要用到bool组件

使用bool组件进行复杂的查询:

可以看到使用bool组件后多条件搜索就没有报错,那么bool的结构是怎么样呢?

bool表达式包含三个jsonArray:

  (1)must 包含了所有必须匹配的条件,如果有一项不匹配则排除,类似于逻辑且

    (2)  should包含的条件必须满足至少一个,类似于逻辑或

  (3)must_not 包含了所有排除的条件,类似于逻辑非

整个结构如下:

{
"query":{
"bool":{
"must":[],
"should":[],
"must_not":[]
}
}
}

并且bool直接多重嵌套使用,所以想做出复杂的搜索功能,可以在bool上多下功夫

还有如上图中的range范围控制,和size查询的大小就不细说,看图应该就明白了

③分页查询

这里再讲一下es中怎么做到分页查询

es中和size并列还有from属性,size是一次查询的数量,from则是从第几个开始查,搭配使用即可达到分页查询的目的

④排序

es中可以使用sort对数据进行排序,sort为一个jsonArray,可以按照多个字段对数据进行排序,说明一下,如果不使用sort排序,es则默认按照_score匹配分数进行降序排序,当使用sort并且sort中没有_score时,_score会变成null从而达到排除按照_score排序,按照多个条件进行排序时,按照jsonArray中json的排序顺序进行先排和后排,关于升序降序学过数据库的童鞋应该很清楚!什么?没学过数据库?那你现在还不去学数据库?

至此elasticsearch基础教程结束,后面将为大家带来elasticsearch的进阶教程和ELK架构实现电商搜索引擎

ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基础教程的更多相关文章

  1. ELK(elasticsearch+kibana+logstash)搜索引擎(一): 环境搭建

    1.ELK简介 这里简单介绍一下elk架构中的各个组件,关于elk的详细介绍的请自行百度 Elasticsearch是个开源分布式搜索引擎,是整个ELK架构的核心 Logstash可以对数据进行收集. ...

  2. 2018.2最新-Scrapy+elasticSearch+Django打造搜索引擎(二)

    请问您今天要来个引擎吗? 工欲善其事必先利其器 最终项目上线演示地址: http://search.mtianyan.cn 第二节:我们搞搞比利,搞搞环境的搭建.Github地址: https://g ...

  3. 【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分词器+pinyin分词器+繁简体转化分词器 6.5.4 启动 ELK+logstash概念描述

    官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod ...

  4. Docker安装部署ELK教程(Elasticsearch+Kibana+Logstash+Filebeat)

    Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash 是一个完全开 ...

  5. elasticsearch kibana logstash(ELK)的安装集成应用

    官网关于kibana的学习指导网址是:https://www.elastic.co/guide/en/kibana/current/index.html Kibana是一个开源的分析和可视化平台,设计 ...

  6. Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统

    Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据.它使用 Java 编写,基于 Apac ...

  7. Elasticsearch+Kibana+Logstash安装

    安装环境: [root@node- src]# cat /etc/redhat-release CentOS Linux release (Core) 安装之前关闭防火墙 firewalld 和 se ...

  8. Elasticsearch(1.1.1)基础教程pdf

    基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT)        Elasticsearch是一个接近实时的搜索平台.这意味着, ...

  9. ELK (elasticsearch+kibana+logstash+elasticsearch-head) 华为云下载地址

    https://mirrors.huaweicloud.com/elasticsearch https://mirrors.huaweicloud.com/kibana https://mirrors ...

随机推荐

  1. python2.x 到 python3.x 中“url”部分变化

    这部分是笔者在亲身项目中遇到的一些变化,并不全,后面将会更新. (1) urllib.urlopen    改为:   urllib.request.urlopen (2) urllib2   删除 ...

  2. Spring mvc解决url传递中文参数乱码问题

    在tomcat服务器中,修改server.xml参数,如<Connector URIEncoding="UTF-8" connectionTimeout="2000 ...

  3. Day02 (黑客成长日记)

    #用户登录次数为三代码 # i = 0 # while i < 3: # username = input('请输入账号:') # password = input('请输入密码:') # if ...

  4. wx:for类表渲染

    列表渲染 wx:for 在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件. 默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item < ...

  5. Crontab定时执行Oracle存储过程

    Crontab定时执行Oracle存储过程 需求描述 我们有一个Oracle的存储过程,里面是每个月需要执行一下,生成报表,然后发送给业务部门,这一个功能我们有实现在系统的前台界面(如图1-1),但是 ...

  6. RxSwift学习笔记8:filter/distinctUntilChanged/single/elementAt/ignoreElements/take/takeLast/skip/sample/debounce

    //filter:该操作符就是用来过滤掉某些不符合要求的事件. Observable.of(1,2,3,4,5,8).filter({ $0 % 2 == 0 }).subscribe { (even ...

  7. ASP.NET Core 统一异常处理和返回

    业务场景: 业务需求要求,需要对 ASP.NET Core 异常进行统一处理和返回,比如出现 500 错误和业务服务错误进行不同的处理和返回. 具体实现: using Microsoft.AspNet ...

  8. 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容

    [源码下载] 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容 作 ...

  9. Mybatis延迟加载、缓存

    一.Mybatis中的延迟加载 1.延迟加载背景:Mybatis中Mapper配置文件中的resultMap可以实现高级映射(使用association.collection实现一对一及一对多(多对多 ...

  10. Android开发 - ImageView加载Base64编码的图片

    在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 ... 这些应用 ...