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. java多线程系列7 高级同步工具(1)信号量Semaphore

    Semaphore叫做信号量 可以控制某个资源可被同时访问的个数, acquire() 获取一个许可,得到许可才能执行后面的代码,如果没有就等待. release() 释放一个许可. 当信号量的只允许 ...

  2. HNOI 2018 简要题解

    寻宝游戏 毒瘤题. 估计考试只会前30pts30pts30pts暴力然后果断走人. 正解是考虑到一个数&1\&1&1和∣0|0∣0都没有变化,&0\&0& ...

  3. ABP框架系列之二:(Entity Framework Core-实体核心框架)

    Introduction(介绍) Abp.EntityFrameworkCore nuget package is used to integrate to Entity Framework (EF) ...

  4. 10. Halloween 万圣节

    10. Halloween 万圣节 (1) On October the 31st,across Britain and the USA,thousands of children are dress ...

  5. 第一个SpringBoot应用

    第一个SpringBoot应用 新建eclipse项目 编写pom文件,配置maven导入的springboot的jar包 <?xml version="1.0" encod ...

  6. python多版本管理包pyenv

    前言: CentOS7  默认版本 python2.7.5 ,但是目前项目开发都是在python3的环境下,而单独编译安装python3时会出现各种异常!!! 系统默认python2.7又不能删除,否 ...

  7. 一个友盟BUG的思考和分析:Invalid update

    1.友盟错误信息 Invalid update: invalid number of rows . The number of rows contained ) must be equal to th ...

  8. 【leetcode】 算法题2 两数相加

      问题      给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

  9. HSmartWindowControl 之 显示图像

    概述:使用Halcon在VS中的控件显示一张图片. 要点:使用了图像缩放和图像显示函数,以及鼠标滚轮响应函数. 1.创建WinForm项目 首先在VS中添加Halcon所需的控件HSmartWindo ...

  10. Mac 安装微软雅黑字体

    https://www.jianshu.com/p/d8c34fff3483 1.找一台Windows电脑,打开字体文件夹C:\Windows\Fonts. 2.搜索"Calibri.微软雅 ...