ElasticSearch学习过程问题整理

ElasticSearch中的主要概念

  1. 索引(index,对应数据库或者数据表)
  2. 文档(document,对应数据数据库中的一条数据)
  3. 字段(field,对应数据库中的列)
  4. 类型(type,每个索引中都可以由一个、多个type,type是index中的一个逻辑数据分类,一个type下的document都有相同的field,ES官方将在9.0版本后摒弃这个概念)
  5. 分片(shard,索引中数据量过大时,可以将索引中的数据分成多个分片,存储在服务器上,支持海量数据的高并发,提升性能和吞吐量)
  6. 副本(replica,在分布式的环境下,机器有可能发生宕机,就会导致索引无法搜索,所以为了保证数据的安全、可用,会将每个索引的分片进行备份存储在另外机器,能正常提供查询的叫做主分片、其余的备份分片叫做副分片)

docker拉取elasticsearch

# 拉取镜像 这里使用的是7.3.0版本
docker pull elasticsearch:7.3.0

docker运行容器

数据卷路径要对应的上

docker run -d --name=elastic \
-p 9200:9200 \
-p 9300:9300 \
-v /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/docker/es/config/jvm.options:/usr/share/elasticsearch/config/jvm.options \
-v /usr/local/docker/es/config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties \
-v /usr/local/docker/es/data:/usr/share/elasticsearch/data \
-v /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins \
-v /usr/local/docker/es/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.3.0

可视化页面elasticsearch-hq

拉取镜像

# 拉取镜像
docker pull elastichq/elasticsearch-hq

运行镜像

# 运行镜像
# link"连接两个容器使其通信,”elastic“要链接的容器名称,”es“为连接容器起的别名
docker run -p 9800:9800 -di --name=elasticHD --link elastic:es containerize/elastichd

常见问题及解决方案:

elasticsearch启动失败:

具体情况具体分析,查看日志:

# 查看日志
docker logs containerId
# 重启服务
docker restart containerId
# 查看是否启动成功
docker ps -a

通常可能的原因,缺少配置、配置路径错误:

# 集群名称
cluster.name: my-application
# 节点名称
node.name: node-1
# 确保文件在”容器中“指定路径
path.data: /usr/share/elasticsearch/config/data
path.logs: /usr/share/elasticsearch/config/logs

Head无法连接elasticsearch服务

可能是elasticsearch服务没有配置跨域,或者没有设置初始化节点,如下是我的配置:

# 指定用于存储数据的路径
path.data: /usr/share/elasticsearch/config/data
# 指定日志文件存储路径
path.logs: /usr/share/elasticsearch/config/logs
# 指定用于发现新节点的主机、地址。
discovery.seed_hosts: ["WIN-QUSP153CQHT", "192.168.1.1"]
# 集群名称
cluster.name: supermarket
# 节点名称
node.name: elasticsearch
# 允许接受所有请求
network.host: 0.0.0.0
# 初始主节点
cluster.initial_master_nodes: ["elasticsearch"]
#开启跨域支持
http.cors.enabled: true
# 允许所有人跨域访问
http.cors.allow-origin: "*"
# 为了安全起见,防止恶意删除索引,删除时必须指定索引名
action.destructive_requires_name: true

分词器

IK分词器

IK分词器下载地址(选择对应版本)

elasticsearch中创建文件架 /plugins/ik (与config同级创建)

# 创建文件夹
mkdir -p plugins/ik

# 权限
chmod -R 777 plugins/

将ik中所有的文件、文件夹放入其中

重启服务

# 重启服务
docker restart containerId

head页面测试

# 分词粒度很小
{
  "analyzer": "ik_max_word",
  "text": "辽宁省沈阳市铁西区劳动公园"
}
# 粒度较粗
{
  "analyzer": "ik_smart",
  "text": "辽宁省沈阳市铁西区劳动公园"
}

自定义词库-> plugins/ik/config/IKANalyzer.cfg.xml

ES7的SQL操作

# SQL请求
post /_sql_?format=csv

# json
{
    "query":"select * from index",
    "filter":{
        "range": {
            "red":{
                 "it":100
             }   
        }
    }
}

# 返回格式
# csv、json、tsv、txt、cbor、smile
# it小于、gt大于


底层查询步骤

  1. 分词、自定义词库
  2. 重建倒排索引(同义词mom\mother)
  3. 搜索

使用步骤

  1. 创建索引
  2. 为索引创建Mapping映射
  3. 搜索

Mapping核心数据类型

当没有手动配置Mapping映射时,索引会自动配置映射。根据字段值推测对应的数据类型。

手动配置Mapping

查看Mapping映射

get index/_mapping/

查看所有索引映射

get /_mapping/

创建映射

就像是Java一样,创建了类接下来就要提供属性。创建索引之后,也应该立即创建映射。

# 请求
put article/_mapping

# Json
{
"properties":{
 "title":{
  "type":"text",
  "analyzer":"ik_max_word",
  "search_analyzer":"ik_smart"
 },
 "content":{
  "type":"text",
  "analyzer":"ik_max_word",
  "search_analyzer":"ik_smart"
 },
 "types":{
  "type":"keyword"
 },
 "read":{
  "type":"integer"
 }
}
}

SpringBoot整合ES

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置

# 9200 http协议   9300 TCP协议
spring:
  elasticsearch:
    rest:
      uris: http://47.96.255.59:9200/

实体类

Spring Data通过注解声明字段的映射属性,下面三个注解:

  1. @Document作用在类,标记实体类为文档对象
  •  一般有四个属性                
    • type: 对应索引库中的类型
    • indexName: 对应索引库的名称      
    • shards:分片数量,默认为5
    • replicas: 副本数量,默认为1
  1. @Id作用在成员变量,标记字段为主键
  2. @filed作用在成员变量,标记为文档的字段,并指定字段映射属性
  •  一般也有四个
    • type: 字段类型,取值是枚举:FieldType
    • index:是否索引,布尔类型,默认是true
    • store:是否存储,布尔类型,默认是false
    • anllyzer:分词器名称- ik_max_word
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你好!关于学习Elasticsearch,我可以给你一些指导。Elasticsearch是一个开源的分布式搜索和分析引擎,主要用于快速、实时地存储、搜索和分析大量数据。下面是一些学习Elasticsearch的步骤: 1. 了解基本概念:开始学习Elasticsearch之前,你需要了解一些基本的概念,比如索引(index)、类型(type)、文档(document)、字段(field)等。这将帮助你更好地理解Elasticsearch的工作原理。 2. 安装和配置:根据你的操作系统,你可以从Elasticsearch官方网站下载并安装合适的版本。安装完成后,你需要进行适当的配置,如设置集群名称、分配内存等。 3. 学习REST API:Elasticsearch提供了丰富的REST API,用于与其进行交互。了解如何使用这些API来索引、搜索和删除数据是学习Elasticsearch的重要一步。 4. 索引和搜索数据:学习如何创建索引、添加文档以及执行搜索操作是使用Elasticsearch的关键。掌握查询语法、过滤器、聚合操作等功能可以帮助你更有效地使用Elasticsearch。 5. 数据建模和分析:学习如何设计合适的数据模型和映射,以及如何使用Elasticsearch进行数据分析和可视化是提高你的技能的重要一步。 6. 扩展和优化:学习如何在生产环境中扩展和优化Elasticsearch集群是非常重要的。了解如何分片、复制、调优性能等将帮助你更好地管理和维护你的数据。 7. 学习资源:除了官方文档,还有很多优秀的学习资源可供参考,如书籍、教程和在线课程等。利用这些资源可以更系统地学习和掌握Elasticsearch。 希望这些步骤能对你学习Elasticsearch有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值