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:最大扩展数量,即生成的模糊匹配项的最大数量。