Java 中调用 Elasticsearch 的模糊查询 API示例

1. 添加依赖
首先,在你的 pom.xml 文件中添加 Elasticsearch 客户端的依赖:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.10.2</version>
</dependency>

2. 编写 Java 代码
以下是一个示例代码,展示了如何使用 Java 调用 Elasticsearch 的模糊查询 API 并处理返回的结果

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.FuzzyQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;
import java.util.Map;

public class ElasticsearchFuzzyQueryExample {

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

        try {
            // 构建查询请求
            SearchRequest searchRequest = new SearchRequest("my-index-000001");

            // 构建模糊查询条件
            FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("title", "Elastisearch")
                    .fuzziness("2")  // 允许最多 2 个字符的差异
                    .prefixLength(3) // 前缀长度,前 3 个字符必须完全匹配
                    .maxExpansions(50); // 最大扩展数量

            // 构建搜索源构建器
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            sourceBuilder.query(fuzzyQuery);

            // 设置搜索请求的源构建器
            searchRequest.source(sourceBuilder);

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

            // 处理搜索结果
            System.out.println("Total hits: " + searchResponse.getHits().getTotalHits().value);
            for (Map<String, Object> hit : searchResponse.getHits().getHits()) {
                System.out.println(hit.getSourceAsMap());
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭客户端
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

参数解释:
title:这是你要查询的字段名。在这个例子中,title 字段是你要进行模糊匹配的字段。
Elastisearch:这是你要匹配的查询词。在这个例子中,Elastisearch 是你希望在 title 字段中找到的词,即使它可能有一些拼写错误。

代码解释:

使用 FuzzyQueryBuilder 构建一个模糊查询,指定查询字段和查询词,并设置模糊查询的参数:
1、fuzziness:允许的最大编辑距离(即允许的字符差异数)。

2、prefixLength:前缀长度,前缀部分必须完全匹配。
3、maxExpansions:最大扩展数量,即生成的模糊匹配项的最大数量。

### Java Elasticsearch 模糊查询实现方法 #### 使用 `FuzzyQueryBuilder` 进行模糊查询 为了在Elasticsearch中执行模糊查询,可以利用`FuzzyQueryBuilder`来构建查询条件。下面是一个具体的例子展示如何设置并应用这种类型的查询: ```java import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.FuzzyQueryBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; // 构建模糊查询对象 FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("field_name", "search_term").fuzziness(Fuzziness.AUTO); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(fuzzyQuery); ``` 这段代码展示了怎样创建一个基于字段名(`field_name`)和搜索词(`search_term`)的模糊匹配查询,并将其加入到`SearchSourceBuilder`实例里[^1]。 #### 定义实体类映射至Elasticsearch索引 当涉及到具体的应用场景时,比如在一个博客平台中处理文章数据,定义相应的实体类是非常重要的一步。这里给出了一种方式用来表示存储于名为“blog”的索引下的文档结构: ```java @Document(indexName = "blog", type = "article") public class Article { @Id private String id; private String title; private String content; } ``` 此段落说明了如何声明一个简单的Java Bean——Article,它对应着Elasticsearch里的记录条目;同时指定了该Bean所属的索引名称以及类型[^2]。 #### 添加必要的Maven依赖项 为了让项目能够顺利连接上Elasticsearch集群并发送请求,还需要确保项目的POM文件中有正确的客户端库配置。以下是针对版本7.10.2的一个典型配置片段: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.10.2</version> </dependency> ``` 上述XML片断应被放置在pom.xml内的dependencies标签之间,从而引入官方推荐使用的REST高级API客户端[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值