2026/7/24 5:17:16

Elasticsearch初识

Elasticsearch初识 简单学习记录以免后续有用到的时候再忘记了。因版本需要锁定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: localhosthttp.port: 9200# 发现设置单节点模式discovery.type: single-node# 安全配置启用认证但使用HTTP访问xpack.security.enabled: truexpack.security.enrollment.enabled: falsexpack.security.http.ssl.enabled: falsexpack.security.transport.ssl.enabled: false四、设置用户密码在bin目录下elasticsearch-setup-passwords interactive按照提示为以下用户设置密码elastic超级用户 - 最重要apm_systemkibana_systemlogstash_systembeats_systemremote_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 superuser1.elasticsearch-usersElasticsearch 提供的用户管理命令行工具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 服务运行的端口号默认是5601server.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\binelasticsearch-reset-password -u elastic问题5Kibana无法连接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 类型存储商品上市日期。