windows10 上安装 elasticsearch

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

  1. 下载安装包

    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

  2. 配置系统环境变量

    ES 软件安装目录

    复制代码
    ES_HOME=C:\DEVPACK\elasticsearch-9.2.2

    节点数据目录(你的集群就在这个目录下创建)

    复制代码
    ES_CLUSTER_ROOT=D:/ES_CLUSTER

    Path 中添加

    复制代码
    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
  3. 节点的 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
  1. 命令行启动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
  2. 启动后设置密码

    复制代码
     $ export ES_PATH_CONF=$ES_HOME/config.sqldam/node1 && elasticsearch-reset-password.bat -u elastic

    This 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

  3. 浏览器测试 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

观察中文分词的效果。

码字不易,请点赞收藏

相关推荐
在坚持一下我可没意见3 小时前
Spring 后端安全双剑(上篇):JWT 无状态认证 + 密码加盐加密实战
java·服务器·开发语言·spring boot·后端·安全·spring
乾元3 小时前
从命令行到自动诊断:构建 AI 驱动的故障树与交互式排障机器人引言
运维·开发语言·网络·人工智能·华为·自动化
deng-c-f3 小时前
C/C++内置库函数(6):C++中类什么时候使用静态变量
开发语言·c++
2301_789015623 小时前
C++:模板进阶
c语言·开发语言·汇编·c++
互亿无线明明3 小时前
在 Go 项目中集成国际短信能力:从接口调试到生产环境的最佳实践
开发语言·windows·git·后端·golang·pycharm·eclipse
噔噔噔噔@3 小时前
详细介绍Python+Pytest+BDD+Playwright,用FSM打造高效测试框架
开发语言·python·pytest
海上彼尚4 小时前
Go之路 - 5.go的流程控制
开发语言·后端·golang
sg_knight4 小时前
什么是设计模式?为什么 Python 也需要设计模式
开发语言·python·设计模式
脾气有点小暴4 小时前
UniApp实现刷新当前页面
开发语言·前端·javascript·vue.js·uni-app
是小胡嘛4 小时前
仿Muduo高并发服务器之Buffer模块
开发语言·c++·算法