想搭建一个自己的信息搜索平台用于记录自己的信息,于是选用了Elasticsearch。
在官网上下载了最新的8.7版,解压后目录如下图:
在运行前建议先配置好jvm相关配置,如内存占用等,默认会占用尽可能大的内存。进入config目录,内容如下:
jvm.options是jvm的配置,需要建立专用文件夹jvm.options.d用于保存配置。Elasticsearch8.7默认启用了HTTPS,需要通过修改elasticsearch.yml进行禁用,否则会出现问题。以上修改完成后,即可进入bin目录运行elasticsearch.bat启动es。启动成功浏览器访问localhost:9200会出现如下返回结果:
至此,es顺利启动了,接下来是通过java操作es。
建立Maven项目,引入依赖
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.7.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!-- 如果出现了 ClassNotFoundException: jakarta.json.spi.JsonProvider 异常,再引入 -->
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
es8.7使用ElasticsearchClient进行操作,连接代码如下:
// Create the low-level client
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200)).build();
// Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(
restClient, new JacksonJsonpMapper());
// And create the API client
ElasticsearchClient client = new ElasticsearchClient(transport);
client.index(g -> g
.index("document")
.document(doc));//在document索引中保存文档doc
SearchResponse<Document> resp = client.search(s -> s
.index("document")
.analyzer("ik_max_word").q(kw)
//为查询字符串指定ik分词器,并用Lucene方法查询数据。ik_max_word最细粒度,ik_smart最粗粒度
,
Document.class);
以上为基本的一些操作。
*踩过的坑:
1、修改文档字段分词器需要在建立索引的时候通过analyzer字段指定想要的分词器。
2、es的路径不能有空格,否则分词器会出问题。