使用Elasticsearch实现全文搜索的最佳实践

大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

Elasticsearch简介

Elasticsearch是一个开源的分布式搜索和分析引擎,基于Apache Lucene构建而成,提供了强大的全文搜索能力和分布式特性。它支持实时搜索、多字段搜索、复杂查询等高级功能,广泛应用于日志分析、搜索引擎、安全情报等领域。

搭建Elasticsearch环境

首先,我们需要搭建Elasticsearch的环境。以下是通过Docker快速启动一个Elasticsearch实例的示例:

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.16.3
  • 1.

这条命令将会在本地启动一个Elasticsearch容器,并映射端口9200(HTTP访问)和9300(集群通信)。

连接Elasticsearch

在Java应用中使用Elasticsearch,首先需要引入Elasticsearch的Java客户端库。假设我们使用官方提供的High-Level REST Client,可以通过以下方式引入:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.16.3</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

接下来,我们来编写一个简单的示例代码,演示如何连接到Elasticsearch并创建索引:

package cn.juwatech.elasticsearch;

import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;

public class ElasticsearchExample {

    private static final String INDEX_NAME = "my_index";
    private static final String TYPE_NAME = "_doc";
    private static final String DOCUMENT_ID = "1";

    public static void main(String[] args) throws IOException {
        // 创建RestHighLevelClient实例
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        // 准备文档内容
        String jsonString = "{\"user\":\"juwatech\",\"postDate\":\"2024-07-04\",\"message\":\"Elasticsearch实现全文搜索的最佳实践\"}";

        // 创建索引请求
        IndexRequest request = new IndexRequest(INDEX_NAME, TYPE_NAME, DOCUMENT_ID);
        request.source(jsonString, XContentType.JSON);

        // 执行索引请求
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);

        // 打印响应信息
        System.out.println("Index Response:");
        System.out.println("Index: " + response.getIndex());
        System.out.println("Type: " + response.getType());
        System.out.println("Id: " + response.getId());
        System.out.println("Version: " + response.getVersion());

        // 关闭client
        client.close();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.

实现全文搜索

为了实现全文搜索,我们需要在索引中存储文档,并配置合适的分析器和映射。以下是一个简单的示例代码,演示如何执行全文搜索:

package cn.juwatech.elasticsearch;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class ElasticsearchSearchExample {

    private static final String INDEX_NAME = "my_index";

    public static void main(String[] args) throws IOException {
        // 创建RestHighLevelClient实例
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        // 准备搜索请求
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchQuery("message", "全文搜索"));
        searchRequest.source(searchSourceBuilder);

        // 执行搜索请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        // 处理搜索结果
        System.out.println("Search Response:");
        System.out.println(searchResponse);

        // 关闭client
        client.close();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

结论

通过本文,我们深入探讨了如何使用Elasticsearch实现全文搜索的最佳实践。从搭建环境、连接到Elasticsearch、创建索引和执行搜索等方面进行了详细的说明和示例代码演示,希望读者可以通过这些内容更好地理解和应用Elasticsearch的强大功能。

微赚淘客系统3.0小编出品,必属精品,转载请注明出处!