ElasticSearch

99 阅读2分钟

ElasticSearch

什么?
基于Luncene的搜索服务器。用Java开发的,主要解决mysql性能低、功能有限的问题。
mysql是关系型数据库 like ‘%小区%’
如果使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低。
功能有限:有些电商的多个模糊搜索单个sql不太好做。
mysql有些情况下索引失效了,没有使用索引会使得效率低。同时数据量大,查询慢。这时一般用带有key-value形式的redis缓存或者专门擅长搜索的ES。

document————————》index(索引库)

ElasticSearch优点:
1、是一个分布式、高扩展、高实时的搜索与数据分析引擎。
2、基于Restful web接口
3、应用于 1 海量数据查询 2 日志数据分析 3 实时数据分析
与mysql一般一起用
ElasticSearch负责搜索数据,但是安全性性,不适合存储数据
mysql安全性高,用来存储数据,和部分CRUD

索引(index)

ElasticSearch存储数据的地方,可以理解成关系型数据库中的数据库概念。

映射(mapping)

mapping定义了每个字段的类型、字段所使用的分词器等。相当于关系型数据库中的表结构。

文档(document)

Elasticsearch中的最小数据单元,常以json格式显示。一个document相当于关系型数据库中的一行数据。

倒排索引(反向索引)

一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的文档id列表。

通过分词策略,形成词和文章的映射关系表,这种词典 映射表 就是倒排索引。
o(1) 复杂度 提高效率
底层 FST数据结构 空间占用小、查询速度快

=============

ElasticSearch的亮点除了各种各样的复杂问题简单化的查询、提高查询性能外;
它有这集群的特性,并天然支持分布式(封装好了分布式)

集群:多个人做一样的事
分布式:多个人做不一样的事

集群的好处:
系统高可用
分担请求的压力

分布式的好处:
系统高性能,高速度
分担存储和计算的压力
解耦

语法

查看详情
get /person002/_search

查看mappings
get /person002/_mapping

查看所有索引
get _cat/indices

查看100条件记录
GET _search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size":100
  
}

查看具体_doc_id

get /person002/_doc/8



应用

应用:智能客服、微博热点、百度搜索、外卖电商评价、翻译、广告推荐、机器学习、识别敏感信息
用哪些分词:
ik分词器
中文:
HanLP

本文使用 文章同步助手 同步