Windows下elasticsearch全文搜索引擎搭建教程

介绍:

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎。当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
  • 实时分析的分布式搜索引擎。
  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

全文搜索属于最常见的需求,开源的 elasticsearch(以下简称 Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

一、下载elasticsearch

Download Elasticsearch | Elastic

二、安装elasticsearch

安装elasticsearch之前,需要安装好jdk并配置好环境变量。要注意的是,最近版本的elasticsearch所需的jdk版本至少在1.8以上。

下载好压缩包后,直接解压后即可使用,无需其他配置。

三、启动elasticsearch

打开bin目录,双击elasticsearch.bat即可启动,出现如下:

即表明成功启动,要保证该窗口一直运行。如果一切正常,默认会在9200端口运行,打开浏览器输入默认的地址http://localhost:9200/ 即可得到说明信息:

四、出现错误的解决:

1. received plaintext http traffic on an https channel, closing connection Netty4HttpChannel
[2022-02-16T21:08:50,085][WARN ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [DESKTOP-VCT39JM] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/[0:0:0:0:0:0:0:1]:9200, remoteAddress=/[0:0:0:0:0:0:0:1]:1172}

解决
是因为开启了 ssl 认证。
在 ES/config/elasticsearch.yml 文件中把 xpack.security.http.ssl:enabled 设置成 false 即可

xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12

2. elasticsearch 账号密码
windows 下直接启动 ElasticSearch ,见到 started 为成功启动,访问 htttp://localhost:9200 需要输入密码,是因为开启了密码验证模式。
找了一轮没看到有账号密码,干脆就设置免密登录就好。

解决
找到 elasticsearch.yml 文件, 把 xpack.security.enabled 属性设置为 false 即可。

# Enable security features
xpack.security.enabled: false

3. 设置内存大小
ES 的内存是自己调节的。在 config/jvm.options 文件中直接设置就好(追加):

-Xms512m
-Xmx2048m

4. windows Could not rename log file ‘logs/gc.log’ to ‘logs/gc.log.14’ (Permission denied).
ES 在 windows 中只允许打开一个应用程序,当你再想去创建一个 ES 应用程序的时候,就会显示 Permission denied,即使是使用 cmd 管理员运行 elasticsearch.bat 文件也是一样的错误。

解决: 注意查看是否已经在别的地方已经打开 ES 服务,实在不行则进行电脑重启
5. org/elasticsearch/action/ActionRequest has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

public static void main(String[] args) throws IOException {
    // 创建 ES 客户端
    RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost(Constants.HOST, Constants.PORT, Constants.HTTP))
    );

    client.close();
}

通过上述代码,使用 RestHighLevelCilent 访问 ES 客户端的时候,出现以下错误:Exception in thread “main” java.lang.UnsupportedClassVersionError:org/elasticsearch/action/ActionRequest has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

看到注释,我们知道是版本不兼容的问题,查找资料看到这样一个表:

Major version numbers map to Java versions:

45 = Java 1.1
46 = Java 1.2
47 = Java 1.3
48 = Java 1.4
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13

讲道理在这个版本任你发,我用Java8 的年代,RestHighLevelClient 肯定是兼容Java 8 的,那么就只有 ES 版本太高了,把 pom.xml 的 ES 依赖版本降到跟 elasticsearch-rest-high-level-client 一样就可以了

<properties>
    <elasticsearch.version>7.17.0</elasticsearch.version>   	 																	<elasticsearch.client.version>7.17.0</elasticsearch.client.version>
</properties>

<dependies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.client.version}</version>
    </dependency>
</dependies>

解决:把 pom.xml 的 elasticsearch 和 elasticsearch-rest-high-level-client 版本一致即可。

安装elasticsearch-head

https://nodejs.org/en/download/ 下载相应系统的msi,双击安装。

安装完成用cmd进入安装目录执行 node -v可查看版本号

执行 npm install -g grunt-cli 安装grunt ,安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号

https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip

下载好压缩包,解压后即可使用,但不可解压在elasticsearch的plugins目录下,

开始安装head
在elasticsearch.yml文件中添加下面两行代码,解决跨域问题

http.cors.enabled: true
http.cors.allow-origin: "*"

双击elasticsearch.bat重启es

进入elasticsearch-head目录,点击index页面,直接运行