windows10 上安装 elasticsearch
INSTALL elasticsearch on windows10
提问:有了大模型, elasticseach 还有意义么?Deepseek 回答:
大模型和Elasticsearch 不是替代关系,而是互补和增强的关系。大模型擅长推理、理解、生成和连接复杂概念。
Elasticsearch 擅长快速、精确地记忆和检索海量的具体事实和细节。
为什么 Elasticsearch 仍然至关重要?
成本与效率:搜索成本: 用大模型(尤其是GPT-4等大型API)去直接"搜索"百万、千万甚至亿级文档,每次查询都输入全部上下文,其token消耗成本和延迟是不可想象的。Elasticsearch的倒排索引技术可以实现毫秒级的检索,成本极低。
训练/微调成本: 让大模型记住所有企业内部知识(如所有产品文档、客服记录),需要昂贵的训练或微调。而Elasticsearch作为外部知识库,可以低成本地动态更新和扩展。
精确性与可解释性:精确匹配: 当用户搜索一个明确的ID(如订单号12345)、一个确切的代码片段或一个专有名词时,Elasticsearch能返回100%准确的结果。大模型则可能"自由发挥",产生幻觉,编造一个不存在的ID或细节。
可解释性: Elasticsearch的搜索结果可以很容易地通过相关性评分(TF-IDF, BM25)来解释"为什么这个文档被返回"。大模型是一个黑盒,很难解释其内部推理过程。
实时性:新数据写入Elasticsearch后,几乎可以立即被检索到。而要让大模型知晓最新信息,需要重新收集数据、训练/微调或嵌入,流程漫长,无法满足实时搜索需求(如新闻、日志、监控)。
结构化查询与聚合。
大模型 + Elasticsearch:强强联合的范式(RAG)这正是目前最主流的架构模式之一------检索增强生成。
工作流程如下:
用户提问: "我们去年Q3在华东区销量最好的产品是什么,它的主要客户反馈有哪些?"
检索: 问题被发送到Elasticsearch。ES从海量的销售数据库(结构化)和客户评论库(非结构化)中,快速检索出与"去年Q3"、"华东区"、"销量最好"、"客户反馈"相关的精确文档和片段。
增强: 将检索到的这些精确、相关、最新的信息(作为"上下文"或"证据"),连同用户的原始问题,一起"喂"给大模型。
生成: 大模型基于这些可靠的检索结果进行理解、整合和总结,生成一个准确、翔实、且可追溯的回答。例如:"根据销售记录,去年Q3华东区销量冠军是产品A,共售出X件。在相关的125条客户评论中,正面评价主要集中在...,提及的主要改进建议是..."。
总结与类比
RAG用检索保证事实性,用生成提升交互性。
ES处理海量数据,为LLM提供精华片段
ES提供最新数据,让LLM回答当下问题
ES提供事实锚点,抑制LLM幻觉
最佳场景
关键字搜索、日志分析、商品筛选、精确查询 复杂问答、内容创作、代码生成、语义分析 知识库问答、智能客服、内容推荐、数据分析报告
结论:
有了大模型,Elasticsearch不仅没有过时,其角色反而从"终点"变成了"智能网关"或"记忆中枢"。 它负责从数据海洋中高效、精确地捞取"针",然后交给大模型这根"巧手"来穿线。未来,"检索(ES)+ 理解/生成(LLM)" 的架构将成为智能信息系统的标配。
项目需要,搭建本地开发环境。安装最新的 es 和 kibana。记录之。我的安装父目录:
C:/DEVPACK
你可以替换成自己的路径(全英文无空格)。我使用的是 MINGW64 命令行工具,所以看起来像 Linux 环境。
Windows 上安装 elasticsearch
-
下载安装包
elasticsearch-9.2.2-windows-x86_64.zip
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.2.2-windows-x86_64.zip
解压到 C:/DEVPACK/elasticsearch-9.2.2
-
配置系统环境变量
ES 软件安装目录
ES_HOME=C:\DEVPACK\elasticsearch-9.2.2节点数据目录(你的集群就在这个目录下创建)
ES_CLUSTER_ROOT=D:/ES_CLUSTERPath 中添加
C:\DEVPACK\elasticsearch-9.2.2\bin务必使用ES自带的 jdk-25
ES_JAVA_HOME=C:\DEVPACK\elasticsearch-9.2.2\jdk可选的 JVM 配置
ES_JAVA_OPTS=-Xms16384m -Xmx16384m -Dfile.encoding=UTF-8 -
节点的 ES 配置文件
假设 ES 集群名:sqldam ,可以支持单节点实例和多节点实例。假设节点名称用 node1, node2, ..., 表示。对应的节点配置文件目录为:
$ES_HOME/config.sqldam/node1 $ES_HOME/config.sqldam/node2 $ES_HOME/config.sqldam/nodeN (N 为节点数)
你可以部署为单机单节点,单机多节点,多机多节点。在每个节点所在的机器上创建节点配置目录(该机器上有几个节点就创建几个配置目录):
$ cp -r $ES_HOME/config $ES_HOME/config.sqldam
$ cd $ES_HOME/config.sqldam
$ mkdir node1
修改后完整的节点配置文件(例如 node1: $ES_HOME/config.sqldam/node1/elasticsearch.yml):
yaml
# ======== Elasticsearch Configuration ========
# 集群名字
cluster.name: sqldam
# 节点名
node.name: node1
#node.attr.rack: r1
path.data: ${ES_CLUSTER_ROOT}/sqldam/node1/data
path.logs: ${ES_CLUSTER_ROOT}/sqldam/node1/logs
#bootstrap.memory_lock: true
# 任何地址都可以访问
network.host: 0.0.0.0
# 多节点如果在 1 台机器上,每个节点的端口要不一样
http.port: 9200
# 这个要配置为所有节点的 hostname (我这里是单节点,略)
# The default list of hosts is ["127.0.0.1", "[::1]"]
#discovery.seed_hosts: ["host1", "host2", "host2"]
# 所有节点名称(我这里是单节点,略)
# Bootstrap the cluster using an initial set of master-eligible nodes:
#cluster.initial_master_nodes: ["node1","node2","node3"]
cluster.initial_master_nodes: ["node1"]
# Allow wildcard deletion of indices:
#
#action.destructive_requires_name: false
# 下面的配置是 ES 启动后自动加的,我只改动了:xpack.security.enrollment.enabled: false
#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically
# generated to configure Elasticsearch security features on 11-12-2025 07:48:47
#
# --------------------------------------------------------------------------------
# Enable security features
xpack.security.enabled: true
xpack.security.enrollment.enabled: false
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
#----------------------- END SECURITY AUTO CONFIGURATION -------------------------
节点的 JVM 配置文件(node1: $ES_HOME/config.sqldam/node1/jvm.options.d/jvm.options )如下:
-Xms16g
-Xmx16g
-
命令行启动ES节点
第一次启动,会自动配置安全。如果重新配置,需要删除配置目录里的下面的目录和文件
certs/ elasticsearch.keystore*node1 启动命令:
$ export ES_PATH_CONF=$ES_HOME/config.sqldam/node1 && elasticsearch.bat类似的 node2 启动命令:
$ export ES_PATH_CONF=$ES_HOME/config.sqldam/node2 && elasticsearch.bat -
启动后设置密码
$ export ES_PATH_CONF=$ES_HOME/config.sqldam/node1 && elasticsearch-reset-password.bat -u elasticThis tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [elastic] user successfully reset.
New value: =v9F0orhQfT5GZYpT5TM
-
浏览器测试 ES
https://127.0.0.1:9200接受风险提示继续,输入:
用户名: elastic
密码: =v9F0orhQfT5GZYpT5TM
Windows 上安装 Kibana
Kibana是Elasticsearch的可视化管理工具 ------ ELK 的 K。需要安装相同版本的 kibana-9.2.2。下载解压到 C:/DEVPACK/kibana-9.2.2:
https://artifacts.elastic.co/downloads/kibana/kibana-9.2.2-windows-x86_64.zip
配置系统环境变量:
KIBANA_HOME=C:\DEVPACK\kibana-9.2.2
Path 中添加:
C:\DEVPACK\kibana-9.2.2\bin
修改配置文件 $KIBANA_HOME/config/kibana.yml 如下:
yaml
# C:/DEVPACK/kibana-9.2.2/config/kibana.yml
server.port: 5601
server.host: "localhost"
server.name: "kibana-sqldam"
server.ssl.enabled: false
elasticsearch.hosts: ["https://127.0.0.1:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "ibZZ*s27iZ3C-FSlmKRi"
elasticsearch.ssl.certificateAuthorities: ["C:/DEVPACK/elasticsearch-9.2.2/config.sqldam/node1/certs/http_ca.crt"]
elasticsearch.ssl.verificationMode: none
elasticsearch.pingTimeout: 15000
elasticsearch.requestTimeout: 30000
elasticsearch.shardTimeout: 30000
i18n.locale: "zh-CN"
logging.root.level: debug
logging.appenders.default:
type: file
fileName: C:/DEVPACK/kibana-9.2.2/logs/kibana.log
layout:
type: json
path.data: C:/DEVPACK/kibana-9.2.2/data
注意到配置 kibana 访问 ES 采用的是 kibana_system 账号,而不能是 elastic 账号。kibana_system 是 ES 自动设置的服务于kibana 的账号。
elasticsearch.hosts: ["https://127.0.0.1:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "ibZZ*s27iZ3C-FSlmKRi"
我们需要为 kibana_system 设置密码。执行下面的命令就得到了密码:
$ export ES_PATH_CONF=$ES_HOME/config.sqldam/node1 && elasticsearch-reset-password.bat -u kibana_system -a
启动 Kibana:
$ kibana.bat
浏览器访问 Kibana:
http://localhost:5601
登录 kibana 需要的账号和密码:
用户名: elastic
密码: =v9F0orhQfT5GZYpT5TM
重要提示
-
Kibana 无法访问通常是因为配置文件 kibana.yml 配置错误
-
网上的一些配置示例可能较旧,不适合新版 9.2.2
-
Kibana 连接 ES 不能使用 elastic 账号,需要使用 kibana_system 账号
-
ES 更改了默认的配置目录(如多节点的 ES 集群),每次启动要指定节点的配置目录:
bash$ export ES_PATH_CONF=$ES_HOME/config.sqldam/node1 && ES命令.bat -
Windows 上目录配置项使用的 "/" 或 "\" 都不是随意的,请严格按照本文设置
-
Kibana 首次启动非常慢。你可以使用以下命令探查端口是否被进程占用或服务是否正常:
bash$ netstat -ano | findstr :5601 $ netstat -ano | findstr :9200
安装分词器插件
默认的 ES 分词器对中文支持不好,需要安装分词器插件。
下载地址:
https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-9.2.2.zip
下载到 C:/DEVPACK/elasticsearch-analysis-ik-9.2.2.zip (不要解压)
然后执行命令安装分词器:
MINGW64 /c/DEVPACK
$ elasticsearch-plugin.bat install file:///C:/DEVPACK/elasticsearch-analysis-ik-9.2.2.zip
-> Installing file:///C:/DEVPACK/elasticsearch-analysis-ik-9.2.2.zip
-> Downloading file:///C:/DEVPACK/elasticsearch-analysis-ik-9.2.2.zip
[=================================================] 100%??
WARNING: this plugin contains a legacy Security Policy file. Starting with version 8.18, Entitlements replace SecurityManager as the security mechani
sm. Plugins must migrate their policy files to the new format. For more information, please refer to https://www.elastic.co/guide/en/elasticsearch/pl
ugins/current/creating-classic-plugins.html
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional entitlements @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* outbound_network
See https://www.elastic.co/guide/en/elasticsearch/plugins/current/creating-classic-plugins.html
for descriptions of what these entitlements allow and the associated risks.
Continue with installation? [y/N]y
-> Installed analysis-ik
-> Please restart Elasticsearch to activate any plugins installed
重启 ES 节点:
$ export ES_PATH_CONF=$ES_HOME/config.sqldam/node1 && elasticsearch.bat
查看安装的插件:
$ elasticsearch-plugin.bat list
analysis-ik
查看安装的插件:
$ curl -X GET "https://localhost:9200/_cat/plugins?v&pretty" \
-u "elastic:=v9F0orhQfT5GZYpT5TM" \
-k
name component version
node1 analysis-ik 9.2.2
测试分词器
在同一个目录下创建 3 个数据文件,以 utf-8 保存:
ik_standard.json
json
{
"text": "Elasticsearch是一个基于Lucene的搜索引擎,支持中文分词。",
"analyzer": "ik_standard"
}
ik_smart.json
json
{
"text": "Elasticsearch是一个基于Lucene的搜索引擎,支持中文分词。",
"analyzer": "ik_smart"
}
ik_max_word.json
json
{
"text": "Elasticsearch是一个基于Lucene的搜索引擎,支持中文分词。",
"analyzer": "ik_max_word"
}
再创建 1 个测试脚本文件:
bash
#!/bin/bash
# @file ik_analyzer.sh
#
# @brief 使用curl命令调用Elasticsearch的_analyze API进行分词测试
#
# @usage
# $ ./ik_analyzer.sh ik_smart.json
#
###############################################################
echo "测试分词器..."
# 检查是否提供了参数(JSON文件)
if [ $# -eq 0 ]; then
echo "Usage: $0 <json_file>"
exit 1
fi
# 检查文件是否存在
if [ ! -f "$1" ]; then
echo "File $1 not found!"
exit 1
fi
# 执行curl命令
curl -X POST "https://localhost:9200/_analyze?pretty" \
-H 'Content-Type: application/json' \
-u "elastic:=v9F0orhQfT5GZYpT5TM" \
-k \
--data-binary "@$1"
进入测试数据文件所在的目录执行测试:
$ ./ik_analyzer.sh ik_standard.json
$ ./ik_analyzer.sh ik_smart.json
$ ./ik_analyzer.sh ik_max_word.json
观察中文分词的效果。
码字不易,请点赞收藏