快速入门Elasticsearch

写在前面

本文是基于版本6.1。如有出入请以官方文档为准https://www.elastic.co/guide/en/elasticsearch/reference/6.6/starting-elasticsearch.html

中文文档:http://doc.codingdict.com/elasticsearch/319/

注意:根据自己使用的版本,查看对应版本的文档。

基本概念

  • document(文档):类比数据库表中一行数据(必须要有一个唯一的标识,如果没有则会自动生成)。
  • type(类型):6.0之前类比数据库中一张表,6.x之后没有这个概念,但是依旧存有这个字段(后续的版本会移除)。
  • index(索引):6.0之前类比数据库的datebase,6.x后移除了type概念,所以类比数据库一张表。
  • mapping:类比数据库中表结构的定义,在es中是对index索引进行结构定义。

索引

索引分为正排索引和倒排索引,如上图,左边为正排索引,右边为倒排索引。

  • 正排索引:根据文档ID映射到内容。
  • 倒排索引:根据内容分词出来的单词映射到文档ID,列表除了文档ID还有单词在文档的偏移量(位置),出现的次数等信息用于计算相关性。

搜索的过程:通过倒排索引获取到文档id,然后再通过正排索引获取到文档内容。

 

mapping

参数详解https://www.elastic.co/guide/en/elasticsearch/reference/6.1/mapping-params.html

查看test_index索引的mapping结构

GET test_index/_mapping

配置含有mapping的索引。

PUT test_index
{
 "mappings": {
  "_doc": {
   "dynamic": "false",
   "properties": {
    "speaker": {"type": "keyword"},
    "tutke": {"type": "text"}
   }
  }
 }
}

dynamic三个参数:

  • true:动态添加新的字段(即mappings会有改动)
  • false:不会添加新的字段(即mappings不会有改动),但是新的数据会存入进去。
  • strict:如果遇到新字段抛出异常

分词

    概念:分词是将文本转化为一系列单词的过程。也成为文本分析。如将 “elasticSearch是最流行的搜索引擎” 转化为"elasticsearch","流行",“搜索引擎”。这是通过分析器(analyzer)实现的,同时分析器也分为好多种,不同的分析器分解出来的单词会不一样,根据自己的实际需求去选择文本分析器。如以上结果是通过ik_max_word分析器实现的。

指定analyzer测试分词效果

POST /_analyze
{
  "analyzer": "standard",
  "text": "elasticSearch是最流行的搜索引擎"
  
}

standard是es自带的分析器,如想要查看更多es自带的分析器和分析效果,请看官方文档Analyzers说明。其中不分词的分析器是keyword analyze。

常用的中文分词器:

指定索引中的字段测试分词效果

POST test_index/_analyze
{
  
  "field": "searchKeyWord",
  "text": "elasticSearch是最流行的搜索引擎"
  
}

理解索引时分词和查询时分词

当数据存入到es中会进行索引时分词,生成一列倒排索引。如:”中国人民” 使用ik分析器会生成”中国人民“,”中国人“,”人民“,”中国“,“国人”这一列倒排索引存到es中。这是我们输入中国进行查询(假设数据存在以下索引和字段):

GET test_index/_search
{
  "query": {
    "match": {
      "tutke": "中国"
    }
  }
}

“中国好”会进行查询时分词,分析器默认是匹配字段tutke的索引时分词用的分析器,即也是ik分析器,那么会对“中国好”分词为“中国“,”好”,和存在es的倒排索引进行匹配。

一个字段支持定义多个分析器生成的倒排索引,以便查询时可以选择使用哪种分析器生成的倒排索引进行匹配。

PUT test_index
{
 "mappings": {
  "_doc": {
   "properties": {
    "tutke": {
      "type": "text",
      "fields":{
        "dk_ik":{
          "type":"text",
          "analyzer":"ik_max_word"
        },
        "dk_keyword":{
          "type":"keyword"
        }
      }
    }
   }
  }
 }
}

此时tutke会生成三种倒排索引,默认的standard分析器生成的,名称为dk_ik的ik分析器生成的,名称为dk_keyword的keyword分析器生成的。

GET test_index/_search
{
  "query": {
    "match": {
      "tutke.dk_ik": "中国"
    }
  }
}

使用方式:字段.分析器名称。tutke.dk_ik表示将匹配ik分析器生成的倒排索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值