实现Java ES模糊查询
简介
在Java开发中,Elasticsearch(简称ES)是一种常用的搜索引擎,提供了丰富的搜索功能。本文将向你介绍如何在Java中实现ES的模糊查询功能。
步骤
步骤 | 描述 |
---|---|
1 | 创建ES客户端 |
2 | 创建索引 |
3 | 设置映射 |
4 | 添加文档 |
5 | 执行模糊查询 |
6 | 处理查询结果 |
代码实现
步骤1:创建ES客户端
首先,我们需要创建一个ES客户端,连接到ES服务器。以下是创建ES客户端的代码:
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestClient;
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
RestHighLevelClient client = new RestHighLevelClient(builder);
在这段代码中,我们使用RestClientBuilder来构建一个ES客户端,并指定ES服务器的地址和端口。
步骤2:创建索引
接下来,我们需要创建一个索引,用于存储我们的文档。以下是创建索引的代码:
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
CreateIndexRequest request = new CreateIndexRequest("my_index");
client.indices().create(request, RequestOptions.DEFAULT);
在这段代码中,我们使用CreateIndexRequest来创建一个索引,将索引名称设置为"my_index"。然后,我们使用client.indices().create方法发送创建索引的请求。
步骤3:设置映射
在ES中,我们可以为索引设置映射,定义每个字段的类型和属性。以下是设置映射的代码:
import org.elasticsearch.client.indices.PutMappingRequest;
import org.elasticsearch.common.xcontent.XContentType;
PutMappingRequest request = new PutMappingRequest("my_index");
request.source("{\n" +
" \"properties\": {\n" +
" \"title\": {\n" +
" \"type\": \"text\",\n" +
" \"analyzer\": \"standard\"\n" +
" }\n" +
" }\n" +
"}", XContentType.JSON);
client.indices().putMapping(request, RequestOptions.DEFAULT);
在这段代码中,我们使用PutMappingRequest来设置索引的映射。在映射中,我们定义了一个名为"title"的字段,类型为"text",使用标准分析器进行分词。
步骤4:添加文档
现在,我们可以向索引中添加文档了。以下是添加文档的代码:
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
IndexRequest request = new IndexRequest("my_index");
request.id("1");
request.source("{\n" +
" \"title\": \"Elasticsearch is cool!\"\n" +
"}", XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
在这段代码中,我们使用IndexRequest来创建一个索引请求,并设置文档的内容。在文档中,我们定义了一个"title"字段,值为"Elasticsearch is cool!"。然后,我们使用client.index方法发送索引请求,并将返回结果存储在response变量中。
步骤5:执行模糊查询
现在,我们可以执行模糊查询了。以下是执行模糊查询的代码:
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.builder.SearchSourceBuilder;
SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("title", "cool"));
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("title");
highlightBuilder.preTags("<em>");
highlightBuilder.postTags("</em>");
sourceBuilder.highlighter(highlightBuilder);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
在这段代码中,我们使用SearchRequest来创建一个搜索请求,并设置索引名称为"my_index"。然后,我们使用SearchSourceBuilder来构建查询条件,这里使用了matchQuery来进行模糊查询,查询字段为