Elasticsearch 调研

2019-03-19  本文已影响0人  王龙江_3c83

1. 基础概念

1.1 倒排索引原理

倒排索引原理举例.png 倒排索引原理.png

1.2 倒排索引构成

屏幕快照 2019-01-10 上午9.40.38.png
屏幕快照 2019-01-10 上午9.41.56.png

1.2 关键词解释

名称 定义
索引 含有相同属性的文档集合,类似于数据库。
类型 索引可以定义一个或多个类型,文档必须属于一个类型,类似于表。
文档 可以被索引的基本数据单位,类似于记录。
分片 每个索引有多个分片,每个分片是一个 Lucene 索引。
副本 拷贝一个分片就形成该分片的一个副本。
Mapping 类似于数据库中的表结构定义,主要作用如下:(1)定义 Index 下的字段名(Field Name);(2)定义 字段的类型,比如数值型、字符串型、布尔型等;(3)定义倒排索引相关的配置,比如是否索引、记录 position 等。

2. Rest API

以下 API 基于 ES7。

2.1 Mapping 设置

创建索引:分片数为3,副本数位1的索引,该索引中包含一个 man 类型和一个 woman 类型,其中 man 类型包括 "name"、"country"、"age"和"date"属性。

PUT /people 
{
  "settings":{
    "number_of_shards":3,
    "number_of_replicas":1
  },
  "mappings":{   
    "properties":{
      "name":{
        "type":"text"
      },
      "country":{
        "type":"keyword"
      },
      "age":{
        "type":"integer"
      },
      "birthday":{
        "type":"date",
        "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

2.2 增加文档

指定文档 id

PUT /people/_doc/1
{
  "name":"wlj",
  "country":"china",
  "age":"24",
  "birthday":"1994-06-01"
}

不指定文档 id

POST /people/_doc
{
  "name":"wlj1",
  "country":"china",
  "age":"24",
  "birthday":"1994-06-01"
}

2.3 修改文档

将 id 为 1 的文档 name 属性改为 "wlj1"

POST /people/_doc/1/_update
{
  "doc":{
    "name":"wlj1"
  }
}

2.4 Search API

2.4.1 全量查询

GET /people/_search 

全量查询,返回第一条。

POST /people/_search 
{
  "query":{
    "match_all":{}
  },
  "from":1,
  "size":1
}
URL 功能
/_search 查询所有的索引。
/my_index/_search 查询单个索引。
/my_index1,my_index2/_search 查询多个索引。
/my_*/_search 使用通配符查询多个索引。

2.4.2 主键查询

GET /people/_doc/1

2.4.3 全文检索

match_phrase 和 match 的区别:关键词出现顺序一致,使用 slop 设置差异度。

POST /people/_doc/_search
{
  "query":{
        "match":{
                "name":"wlj1"
        }
  },
  "sort":[
    {"birthday":{"order":"desc"}}
  ]
}

2.4.6 复合查询

should
must
must_not

2.4.7 聚合查询

按 "publish_date" 聚合计数

POST /people/_doc/_search
{
  "query":{
    "match":{
      "country":"china"
    }
  },
  "aggs":{
    "group_by_birthday":{
      "terms":{
        "field":"birthday"
      }
    }
  },
  "sort":[
    {"birthday":{"order":"desc"}}
  ]
}

查询 "publish_date" 的统计值

{
  "aggs":{
        "grades_publish_date":{
                "stats":{
                        "field":"publish_date"
                }
        }
  }
}

查询 "publish_date" 的最小值

{
  "aggs":{
        "grades_publish_date":{
                "min":{
                        "field":"publish_date"
                }
        }
  }
}

2.4.9 关键字

关键字 功能
"profile":true 显示查询过程。
explain 显示相关性算分过程。

参考资料

上一篇下一篇

猜你喜欢

热点阅读