简单学习记录,以免后续有用到的时候再忘记了。
因版本需要锁定7.1.1版本:对于 Elasticsearch 7.1.1,推荐使用以下 Spring Boot 版本组合:
Spring Boot 2.1.x 或 2.2.x 版本
对应的 Spring Data Elasticsearch 版本为 3.2.x
一、elasticsearch:
下载地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/getting-started-install.html
二、解压后:
进入bin目录下,双击elasticsearch.bat启动
验证:浏览器访问http://localhost:9200 如果有数据返回,说明启动成功
三、修改配置:
进入 config 目录,找到 elasticsearch.yml 文件,用记事本或其他文本编辑器打开。
# 集群名称
cluster.name: elasticsearch
# 节点名称
node.name: node-1
# 数据存储路径
path.data: G:\pubTools\devtools\elasticsearch-7.6.2-windows-x86_64\elasticsearch-7.6.2\data
# 日志存储路径
path.logs: G:\pubTools\devtools\elasticsearch-7.6.2-windows-x86_64\elasticsearch-7.6.2\logs
# 网络设置
network.host: localhost
http.port: 9200
# 发现设置(单节点模式)
discovery.type: single-node
# 安全配置(启用认证但使用HTTP访问)
xpack.security.enabled: true
xpack.security.enrollment.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false
四、设置用户密码
在bin目录下:elasticsearch-setup-passwords interactive
按照提示为以下用户设置密码:
elastic(超级用户) - 最重要
apm_system
kibana_system
logstash_system
beats_system
remote_monitoring_user
为了简化,可以为所有用户设置相同的密码: 123456(仅用于开发环境)。
五、验证
访问:http://localhost:9200
会出现登录框,输入:
用户名:elastic
密码:刚才设置的密码(123456)
成功访问后:
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "LEWEgqdAQnGifiY7KCzBJQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
六、重置elastic用户密码(如果忘记了可以重置)
elasticsearch-reset-password -u elastic
七、创建新用户
elasticsearch-users useradd myuser -p mypassword -r superuser
1.elasticsearch-users:Elasticsearch 提供的用户管理命令行工具
2.useradd:子命令,表示要添加一个新用户
3.myuser:要创建的新用户名
4.-p mypassword:设置该用户的密码为 “mypassword”
5.-r superuser:为该用户分配"superuser"(超级用户)角色
八、设置为windows服务
elasticsearch-service.bat start
九、下载Kibana
访问:https://www.elastic.co/downloads/kibana
选择与Elasticsearch相同版本的Windows ZIP包。
十、解压和配置
解压到目录:
进入config,编辑kibana.yml文件
# Kibana 服务运行的端口号,默认是5601
server.port: 5601
# Kibana 服务绑定的主机地址,"localhost"表示只允许本地访问
server.host: "localhost"
# Elasticsearch 服务器的地址列表
elasticsearch.hosts: ["http://localhost:9200"]
# kibana_system用户
elasticsearch.username: "kibana_system"
# 在4.2小节设置的kibana_system用户密码
elasticsearch.password: "123456"
# 禁用timelion插件
vis_type_timelion.enabled: false
十一、启动
在bin目录下:kibana.bat
在浏览器中:http://localhost:5601
使用elastic用户和密码登录
十二、常见问题
问题1:端口被占用
错误信息:Port 9200 is already in use
解决方案:
检查是否有其他Elasticsearch实例在运行
修改配置文件中的端口号:
http.port: 9201
使用命令查看端口占用:netstat -ano | findstr 9200
问题2:内存不足
错误信息:OutOfMemoryError
解决方案:
修改 config/jvm.options 文件中的内存设置:
-Xms2g
-Xmx2g
问题3:无法访问Elasticsearch
可能原因:
防火墙阻止了9200端口
network.host配置问题
解决方案:
检查Windows防火墙设置
确认配置文件中的network.host设置:
network.host: localhost # 仅本地访问
# 或
network.host: 0.0.0.0 # 允许远程访问(需要配合防火墙)
问题4:忘记用户密码
解决方案:
cd C:\elasticsearch\elasticsearch-9.1.5\bin
elasticsearch-reset-password -u elastic
问题5:Kibana无法连接Elasticsearch
解决方案:
确认Elasticsearch正在运行
检查kibana.yml中的elasticsearch.hosts配置
如果启用了认证,确认kibana_system用户密码正确
字段类型详解:
| 字段类型 | 用途 | 是否分词 | 示例 |
| --- | --- | --- | --- |
| text | 用于全文搜索,会经过分词器处理 | ✅ | "这是一段中文文本" |
| keyword | 用于精确匹配、聚合、排序,不进行分词 | ❌ | "status:active" |
| date | 存储日期时间 | - | "2024-06-01T10:00:00Z" |
| long, integer, short, byte | 整数类型 | - | 100, -5 |
| double, float | 浮点数类型 | - | 3.14 |
| boolean | 布尔值 | - | true, false |
| ip | IP 地址 | - | "192.168.1.1" |
| geo_point | 地理坐标 | - | {"lat": 39.9, "lon": 116.4} |
| object | 嵌套 JSON 对象 | - | {"name": "张三", "age": 30} |
| nested | 独立索引的嵌套对象,支持数组中的对象列表 | - | 数组中的对象列表 |
1. text 与 keyword 的选择
text 类型适用于需要进行全文检索的字段,例如商品描述、文章内容等。它会经过分词器处理,生成多个词根并存储在倒排索引中。
keyword 类型适用于需要精确匹配、排序或聚合的字段,例如状态标签、分类编码等。它不会被分词,整个字段作为一个整体进行索引。
2. 数值类型的选择
整数类型(如 long, integer, short, byte)适合存储离散数值,如数量、年龄等。应根据数据范围选择合适的数据类型以节省存储空间
14官网。
浮点类型(如 double, float)适合存储连续数值,如价格、评分等。对于需要高精度的场景,可以使用 scaled_float 类型,通过缩放因子将浮点数转换为整数存储
14官网。
3. 特殊类型
date 类型用于存储日期时间信息,支持多种格式,如 yyyy-MM-dd HH:mm:ss 等。
geo_point 类型用于存储地理坐标,支持距离查询、边界框查询等地理空间操作。
三、Mapping 设计最佳实践
显式定义字段类型:避免依赖动态映射,提前定义字段类型以防止类型误判。
合理选择分词器:对于中文文本,推荐使用 ik_max_word 或 ik_smart 分词器。
使用多字段(Multi-fields):一个字段可以同时具有多种类型,例如 text 类型用于全文搜索,keyword 类型用于排序和聚合。
避免动态新增字段:在生产环境中,建议设置 dynamic: strict 以防止脏数据污染索引结构。
禁用不必要的字段索引:对于不需要参与搜索或聚合的字段,可以通过设置 index: false 来减少存储开销。
合理配置字段压缩策略:使用 scaled_float 等类型优化数值字段的存储和聚合性能。
示例:
name 字段使用 text 类型,支持全文搜索。
sku 字段使用 keyword 类型,用于精确匹配。
price 字段使用 float 类型,存储价格信息。
available 字段使用 boolean 类型,表示商品是否上架。
release_date 字段使用 date 类型,存储商品上市日期。