ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基础教程

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架构实现电商搜索引擎

原文地址:https://www.cnblogs.com/buggeerWang/p/10714181.html

时间: 2024-08-04 21:52:54

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

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

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 Elasticsearch 官方网站 Elasticsearch文档 NLog.Targets.ElasticSearch   package Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据. 它使用 Java 编写,基于 Apache Lucene,尽管这些细节隐藏在

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

请问您今天要来个引擎吗? 工欲善其事必先利其器 最终项目上线演示地址: http://search.mtianyan.cn 第二节:我们搞搞比利,搞搞环境的搭建.Github地址: https://github.com/mtianyan/ArticleSpider IDE: pycharm 数据库: mysql, redis, elasticsearch 开发环境 virtualenv 这次的数据库只介绍mysql,后面两个会放到要用到的章节. Pycharm的安装和使用 Pycharm在win

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

官网关于kibana的学习指导网址是:https://www.elastic.co/guide/en/kibana/current/index.html Kibana是一个开源的分析和可视化平台,设计用于Elasticsearch.使用Kibana搜索.查看和与存储在Elasticsearch索引中的数据交互.您可以轻松地执行高级数据分析并在各种图表.表和映射中可视化数据. Kibana使理解大量数据变得容易.它简单的.基于浏览器的界面使您能够快速创建和共享动态仪表板,实时显示对Elastics

ELK elasticsearch+kibana+logstash 躲坑指南 安装步骤

记录下从安装到正常使用过程中跳过的坑 1.java环境的问题,可以装高版本但一定不能低于它的要求 例: 2.版本兼容性的问题,3个软件都可以从官网上下载,而且下面都会有注释要求其他软件的版本 官网下载地址: https://www.elastic.co/downloads 例: 3.针对elasticsearch,有很多插件haed.marvel.kopf.bigdesk等等,根据实际情况进行下载 正确安装插件:是在elasticsearch的bin/plugin   install    XX

Elasticsearch+Kibana+Logstash 搭建日志平台

大型日志平台搭建 Java 环境部署 网上很多教程,此处只做出测试 java -version java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) Elasticsearch 搭建 curl -O https://download.elasticsearch.

WorkerMan 入门学习之(二)基础教程-Connection类的使用

1.TcpConnection类 的使用 一.简单的TCP测试 Server.php <?php require_once __DIR__.'/Workerman/Autoloader.php'; use Workerman\Worker; $worker = new Worker('websocket://0.0.0.0:80');// 连接回调 $worker->onConnect = function ($connection){ echo "connection succes

【ELK】【docker】6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow

本章其实是ELK第二章的插入章节. ===================================================================================== ELK系列的示例中,启动的是单个的ES节点. 系列文章: [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器 [ELK][docker][elasticsearc

ELK学习记录二 :elasticsearch、logstash及kibana的安装与配置

注意事项: 1.ELK版本要求5.X以上,本人使用版本:elasticsearch-6.0.0.kibana-6.0.0-linux-x86_64.logstash-6.0.0.tar 2.Elasticsearch5.x版本必须基于jdk1.8,安装环境必须使用jdk1.8 3.本人使用linux操作系统的centos6.5版本作为测试环境,其他环境命令有差异,请注意 4.本教程适合完全离线安装 5.ELK及jdk安装包下载路径:https://pan.baidu.com/s/1KAPtSt4

部署 elk 日志系统 elasticsearch、logstash、 kibana

安装elk         安装Java 1.8环境         解压源码安装包:         tar xf jdk-8u121-linux-x64.tar.gz          ll         mkdir /work/opt -p         mv  jdk1.8.0_121  /work/opt/jdk         ll /work/opt/jdk/         chown -R root.root  /work/opt                   vim