windows安装ElasticSearch踩坑记

慈云数据 2024-04-27 技术支持 58 0

ElasticSearch是一个开源的分布式搜索和分析引擎。它提供实时分布式搜索功能,可以索引和搜索大量的结构化和非结构化数据。Elasticsearch以其速度、可伸缩性和处理复杂查询的能力而闻名。它常用于日志分析、全文搜索、文档搜索和数据分析等领域。使用ElasticSearch的著名案例:

  • Netflix:Netflix使用Elasticsearch来提供其用户界面的搜索和建议功能。它帮助用户快速找到他们想要观看的内容,并提供个性化的推荐。

  • Uber:Uber使用Elasticsearch来处理其大量的实时地理位置数据。它帮助Uber在地图上显示司机和乘客的位置,并计算最佳的行程。

  • GitHub:GitHub使用Elasticsearch来提供其代码搜索功能。它帮助开发人员快速找到他们需要的代码和项目。

  • Facebook:Facebook使用Elasticsearch来支持其Graph Search功能。这个功能允许用户通过搜索来查找与他们相关的内容和人。

  • Stack Overflow:Stack Overflow使用Elasticsearch来提供其问题和答案的搜索功能。它帮助开发人员快速找到解决方案和有关编程问题的帮助。

    本文记叙在Windows环境下安装相关程序出现的问题。

    一、安装运行ElasticSearch

    1.1安装ElasticSearch

    前往官网 elasticsearch官网下载 。

    1.2运行ElasticSearch

    下载之后, 解压到制定文件夹。解压之后,执行bin下面的elasticsearch.bat脚本(最好在cmd窗口下执行,可以看清失败日志)

    1.2.1安装出现“此时不应有 \java\jdkXX”

    启动之后, 发现报错,此时不应有 \java\jdk1.8.0_20

    最新版本的Elasticsearch是自带jdk的,但程序还是会检查系统的jdk环境,真是多管闲事。在确定java环境没有配错的情况下,查询才知道,自己的jdk安装的路径带有空格(安装在“Program Files”子目录下)。

    需要注意的是:第一次启动的时候,控制台会输出默认账户已经密码,注意保存起来。如果忘记密码,运行安装目录下的重置密码脚本

    启动成功之后,在浏览器输入:http://localhost:9200/  。运行如下:

    二、安装运行elasticsearch-head

    2.1安装elasticsearch-head

    elasticsearch-head 是一个用于浏览和管理 Elasticsearch 集群的 Web 界面工具。它提供了可视化的界面,可以展示索引、文档、节点和集群的信息,并且支持对数据进行简单的搜索和查询。elasticsearch-head 还提供了一些管理功能,如创建和删除索引、添加和删除文档等。

    2.1.1源码安装

    如果本地有nodejs环境,则选择从源码下载安装

    git clone git://github.com/mobz/elasticsearch-head.git
    

    2.1.2插件下载

    或者,在chrome商店下载,搜索elasticsearch-head插件(笔者chrome商店无法访问)

    2.2运行elasticsearch-head

    cd elasticsearch-head
    npm install
    npm run start
    open http://localhost:9100/

    2.2.1运行显示 “集群健康值: 未连接”

    浏览器运行  http://localhost:9100/,显示 “集群健康值: 未连接”

    打开浏览器调试模式,出现跨域受限提示 。

    elasticsearch.yml配置加上允许跨域参数

    # ---------------------------------- head plugin -----------------------------------
    # head等插件访问es。设置参数的时候[key: value]中,冒号后面要有空格
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    2.2.2运行发现 “未授权”异常

    重启之后,发现异常仍未解决, 打开浏览器调试模式,出现未授权提示 。

    修改浏览器参数,把账户密码带上 http://localhost:9100/?auth_user=dev&auth_password=123456

     运行正常了!

    三、安装运行kibana

    Kibana是一个用于数据可视化和分析的开源工具。它是Elasticsearch的一个组件,用于在Elasticsearch索引中搜索、分析和互动式地可视化数据。Kibana提供了丰富的图表和图形,可以帮助用户更好地理解和分析数据,从而支持数据驱动的决策和洞察力的发现。Kibana还允许用户创建和保存自定义的仪表板,以便随时查看和监控数据。

    kibana中文用户手册

    3.1安装kibana

    前往官网 kibana官网下载 。下载解压则可。

    3.2运行kibana

    编辑config目录下kibana.yml。修改以下配置

    # =================== System: Elasticsearch ===================
    # The URLs of the Elasticsearch instances to use for all your queries.
    elasticsearch.hosts: ["http://localhost:9200"]
    # If your Elasticsearch is protected with basic authentication, these settings provide
    # the username and password that the Kibana server uses to perform maintenance on the Kibana
    # index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
    # is proxied through the Kibana server.
    elasticsearch.username: "dev"
    elasticsearch.password: "123456"

     启动bin目录下的kibana.bat脚本。浏览器输入:http://localhost:5601/

    3.2.1出现超级用户不允许操作异常

     创建新账号,并授权

    elasticsearch-users.bat useradd   dev
    elasticsearch-users.bat roles -a superuser  dev
    elasticsearch-users.bat roles -a kibana_system dev

    重新启动,正常! 

    四、安装使用IK分词器 

    IK 分词器是一个专门针对中文文本的分词工具,用于将一段中文文本切分成单个的词语。它是基于 Java 开发的,可以与 Elasticsearch 以及其他一些中文处理工具集成使用。支持用户自定义词典,包括拓展词/停用词。

    4.1安装IK分词器

    官网下载  ik分词器下载

    解压后,把整个文件夹复制到ES的插件目录,如下所示

    4.2运行IK分词器 

    4.2.1解决IKAnalyzer.cfg.xml文件访问权限不足问题

    重启ES,出现异常 

    access_control_exception', 'access denied ("java.io.FilePermission" “XX\ElasticSearch\elasticsearch-8.12.2\plugins\ik\config\IKAnalyzer.cfg.xml” “read”)。

    一开始觉得是文件权限不够,查看之后发现文件读写权限都有。搜索之后,发现是ES的安装包路径有空格(跟前面jdk问题一样,都是因为安装在“Program Files”子目录下)。

    把ES的解压目录重现换个文件位置,重启,没有出现问题。

    4.2.2在线测试

    浏览器输入 http://localhost:5601/,进入开发者工具。

    IK分词器有两种分词模式:

    • ik_max_word:粒度细,会将文本按照最大概率匹配的方式进行分词
    • ik_smart:粒度粗,将输入文本按照规则进行切分,但不考虑词语频率

      五、安装总结

      第一次安装ElasticSearch开发环境是非常折腾的,总会出现各种问题,一篇安装教程不可能应付所有出现的异常问题。对了,朋友们安装的时候记得全部保持同一个版本号,避免出现版本不兼容问题。

      如果使用spring-boot-starter-data-elasticsearch,也要考虑springboot与elasticsearch的兼容性。如下图所示:原文(《springboot与elasticsearch版本兼容》)

      笔者springboot采用的版本是2.7.18,一开始下载最新的是elasticsearch(8.12.2),最后发现使用api创建索引的时候会出现无法解析返回值(实际数据已插入)。尝试升springboot版本到3.X,出现灾难性的组件版本不兼容问题,特别是jpa,security等,无奈把elasticsearch降到7.17.14。问题得到解决。

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon