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的一些基本使用进行了解了。git


 

2.映射

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

{"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-ikjson

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

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

  (2) ik_smart,该策略不容许词汇重复,词条中若是有没有匹配到词典的字直接忽略app

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


3.搜索

①query组件

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

 

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

       再看到红色剪头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架构实现电商搜索引擎

相关文章
相关标签/搜索