栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticSearch笔记

elasticSearch笔记

ElasticSearch 一、全文检索

从非结构化的数据中把一部分信息提取出来,重新组织,使其变得有一定的结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

1.索引的概念

从非结构化数据中提取出来的然后重新组织的信息称为索引。

2.全文检索

先建立索引,然后在对索引进行搜索的过程。

二、相关的概念

1.索引库(相当于数据库中的表)

索引库就是存储索引的保存在磁盘上的一系列文件。 索引库相当于数据库中的一张表

2.document对象 (相当于表中的一条记录)

在索引前需要将原始内容创建成文档,文档中包括一个一个的域,域中存储内容,每个文档都有一个唯一的编号就是文档id

3.Field(相当于数据库中的字段)

field相当于数据库中的字段column ,数据类型可以分为数值类型和文本类型

一般需要查询的字段都是文本类型的,field还有如下属性

    是否分词

    是否对域的内容进行分词处理,前提是我们要对域的内容进行查询

    是否索引

    将field分析后的词或整个field进行索引,只有索引方可搜索到。

    是否存储

    将field值存储在文档中,存储在文档中的field才可以在document中获取.

4.term对象

从文档对象拆出来的每个单词叫做一个term,不同的域中拆分出来的相同的单词是不同的term. term是创建索引的关键词对象。

三、ElasticSearch简介

ElasticSearch 简称 es, 是一个开源的高扩展的分布式全文检索引擎,可以近乎实时的存储、检索数据,

本身的扩展性很好,可以扩展到上百台服务器. 其目的是通过简单的Restful API来隐藏其Lucene的复杂性,从而使全文检索变得简单。

对应关系:

(关系型数据库)Relational DB -> Databases -> Tables -> Rows -> Columns

Elasticsearch -> Indices -> Types -> documents -> Fields

核心概念:

    索引(小写字母来定义)

一个索引就是一个拥有几分相似特征的文档的集合。

    类型 type

    在一个索引中,你可以定义一种或多种类型.一个类型是你的索引的一个逻辑上的分类、分区。

    字段 field

    对文档数据根据不同属性进行的分类表示

    映射 mapping

    mapping是处理数据的方式和规则方面做得一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等.

    文档

    一个文档是一个可被索引的基础信息单元,json格式

    接近实时NRT

    ElasticSearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟。

    集群Cluster

一个集群就是由一个或多个节点组织在一起,他们共同持有整个的数据,并一起提供索引和搜索的功能,一个集群由一个唯一的名字表示,这个名字就是"elasticsearch".

8.节点node

一个节点是集群中的一个服务器。

9.分片和复制 shards&replicas

分片 : 允许你水平扩展你的内容容量

允许你在分片上进行分布式的、并行的操作、进而提高性能的吞吐量

复制:

当分片、节点失败的情况下、提供了高可用性,每个索引可以被分成多片,在elasticSearch中每一个索引有5个主分片和5个复制分片,原因是当服务器发生故障时,分片或节点可能会出于某种原因就消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的.

4.1 创建索引和映射

创建索引: PUT http://虚拟机地址:9200/索引名

创建映射 POST http://虚拟机地址:9200/索引名/映射名/_mapping

删除索引 DELETe http://虚拟机地址:9200/索引名

4.2 创建文档document

创建文档:POST http://虚拟机地址:9200/索引名/文档名

修改文档: POST http://虚拟机地址:9200/索引名/文档名

删除文档:DELETE http://虚拟机地址:9200/索引名/文档名

查询文档-->根据id查询:GET http://虚拟机地址:9200/索引名/文档名/id

查询文档(queryString查询): POST http://虚拟机地址:9200/索引名/文档名/_search

会把词进行拆解 分词查询

term 查询: POST http://虚拟机地址:9200/索引名/文档名/_search

不会吧词进行分解 是一个整体的词

IK分词器 (IK Analyzer)

两种模式 : ik_smart 粒度会粗一些

ik_max_word 粒度会更细一些

DSL语句使用

索引操作:

查询所有索引: GET /_cat/indices?v

删除某个索引 DELETE /索引名称

新增索引 PUT /索引名称

更新某个域:

		POST /索引名/文档名/id/_update

​		{

​			"doc": {

​				......

​			}

​		}

删除document

DELETE /索引名/文档/id

查询所有数据

GET  /user/_search

搜索排序:

	GET /user/_search

​		{

​				"query": {

​						"match_all": {}

​					}

​					"sort": {

​						"字段名": {

​								"order": "desc" //降序  "asc" //增序	

​						}

​					}

​		}	

分页查询

GET /user/_search

​		{

​				"query": {

​						"match_all": {}

​					}

​					"sort": {

​						"字段名": {

​								"order": "desc" //降序  "asc" //增序	

​						}

​					},

​					"from":  起始页,

​					"size": 每页查询的数据大小

​		}	

查询模式:

(1) term查询

GET _search

{
  "query": {
    "term": {
      "city": {
        "value": "武汉"
      }
    }
  }
}

(2) terms 查询

GET _search

{

​	"query": {

​			"terms": {

​				"字段名":[

​					"value1",

​					"value2"

​					]

​				}



​		}

}

(3) match查询

GET _search
{
  "query": {
    "match": {
      "city": "武汉深圳"
    }
  }
}

(4) query_string 查询

GET _search
{
  "query": {
    "query_string": {
      "default_field": "city",
      "query": "武汉深圳"
    }
  }
}

#####

(5) range 查询 --> 范围查询

gt : > gte: >=

lt: < lte: <=

exists 可以过滤用于查找拥有某个域的数据

GET _search
{
  "query": {
    "exists": {
      "field": "address"
    }
  }
}

(6) bool查询

must 相当于and

must_not 相当于not

should 相当于 or

GET _search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "city": {
              "value": "深圳"
            }
          }
        },
        {
          "range": {
            "age": {
              "gte": 20,
              "lte": 60
            }
          }
        }
      ]
    }
  }
}
(7) match_all 查询

GET _search
{
  "query": {
    "match_all": {}
  }
}
(8) match 查询 match查询是一个标准的查询

GET _search
{
  "query": {
    "match": {
      "description": "武汉"
    }
  }
}

(9) Prefix 查询 以什么字符开头,可以更简单的使用prefix

GET _search
{
  "query": {
    "prefix": {
      "name": {
        "value": "赵"
      }
    }
  }
}

(10) multi_match 查询

multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个

GET _search
{
  "query": {
    "multi_match": {
      "query": "深圳",
      "fields": [
        "city",
        "description"
        ]
    }
  }
}


Spring Data ElasticSearch

Spring Data ElasticSearch基于Spring data API 简化elasticsearch操作,将原始操作的客户端API进行封装。SpringData 为 ElasticSearch项目提供集成搜索引擎。SpringDataElasticSearch POJO的关键功能区域为中心的模型与ElasticcSearch几乎文档和轻松地编写一个存储库数据访问层
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号