elasticsearch(七)java 搜索功能Search Request的介绍与使用

目录

1,首先创建主搜索请求:

2,对主搜索请求进行参数设置


       前端几节都是介绍的基于单个文档或着单个文档库的操作,

       本节开始将介绍基于所有或指定的任何个数文档库的操作的api

        SearchRequest用于与搜索文档、聚合、定制查询有关的任何操作,还提供了在查询结果的基于上,对于匹配的关键词进行突出显示的方法。

1,首先创建搜索请求对象:

SearchRequest searchRequest = new SearchRequest(); 

2,对搜索请求进行基本参数设置

1)设置查询指定的某个文档库:

SearchRequest searchRequest = new SearchRequest("posts"); 
searchRequest.types("doc"); 

2)查询多个文档库,其中多个文档库名之间用逗号隔开

 SearchRequest searchRequest = new SearchRequest("posts2","posts", "posts2", "posts1");

或者这样设置:

SearchRequest searchRequest = new SearchRequest();
// 指定只能在哪些文档库中查询:可以添加多个且没有限制,中间用逗号隔开
searchRequest.indices("posts2","posts", "posts2", "posts1");

默认是去所有文档库中进行查询

3)指定查询的文档库中的文档类型:

searchRequest.types("doc1");

或多种类型,同样是文档类型之间用逗号隔开:

 searchRequest.types("doc1", "doc1", "doc2");

4)设置指定查询的路由分片

searchRequest.routing("routing");

5)用preference方法去指定优先去某个分片上去查询(默认的是随机先去某个分片)

searchRequest.preference("_local");

6)向主搜索请求中可以添加搜索内容的特征参数

a.创建  搜索内容参数设置对象:SearchSourceBuilder

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

b. 将SearchSourceBuilder对象添加到搜索请求中:

searchRequest.source(searchSourceBuilder);

3,为搜索的文档内容对象SearchSourceBuilder设置参数:

       大多控制搜索内容的行为参数都可以在SearchSourceBuilder上进行设置,SearchSourceBuilder包含与Rest API的搜索请求主体中类似的参数选项。 以下是一些常见选项的几个示例:

1)查询包含指定的内容:

a.查询所有的内容

searchSourceBuilder.query(QueryBuilders.matchAllQuery());

b.查询包含关键词字段的文档:如下,表示查询出来所有包含user字段且user字段包含kimchy值的文档

sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); 

c.上面是基于QueryBuilders查询选项的,另外还可以使用MatchQueryBuilder配置查询参数

MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
// 启动模糊查询
matchQueryBuilder.fuzziness(Fuzziness.AUTO); 
// 在匹配查询上设置前缀长度选项
matchQueryBuilder.prefixLength(3); 
// 设置最大扩展选项以控制查询的模糊过程
matchQueryBuilder.maxExpansions(10);

d.也可以使用QueryBuilders实用程序类创建QueryBuilder对象。此类提供了可用于使用流畅的编程样式创建QueryBuilder对象的辅助方法:

QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
                                                .fuzziness(Fuzziness.AUTO)
                                                .prefixLength(3)
                                                .maxExpansions(10);
注:无论用于创建它的方法是什么,都必须将QueryBuilder对象添加到SearchSourceBuilder
searchSourceBuilder.query(matchQueryBuilder);

3)设置查询的起始索引位置和数量:如下表示从第1条开始,共返回5条文档数据

sourceBuilder.from(0); 
sourceBuilder.size(5); 

4)设置查询请求的超时时间:如下表示60秒没得到返回结果时就认为请求已超时

sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

5)默认情况下,搜索请求会返回文档_source的内容,但与Rest API中的内容一样,您可以覆盖此行为。例如,您可以完全关闭_source检索:

sourceBuilder.fetchSource(false);

该方法还接受一个或多个通配符模式的数组,以控制以更精细的方式包含或排除哪些字段

String[] includeFields = new String[] {"title", "user", "innerObject.*"};
String[] excludeFields = new String[] {"_type"};
sourceBuilder.fetchSource(includeFields, excludeFields);

 

 

本节内容待续,敬请关注 .... 

  • 31
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Elasticsearch是一个开源的分布式搜索和分析引擎,基于Apache Lucene搜索库构建。它被广泛用于日志分析、全文检索、业务监控等场景。 在Java使用Elasticsearch可以通过Java API来操作。以下是一个简单的示例: 1. 在pom.xml文件中添加Elasticsearch依赖: ``` <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.9.2</version> </dependency> ``` 2. 创建Elasticsearch客户端: ``` RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); ``` 3. 创建索引: ``` CreateIndexRequest request = new CreateIndexRequest("my_index"); client.indices().create(request, RequestOptions.DEFAULT); ``` 4. 添加文档: ``` IndexRequest request = new IndexRequest("my_index"); request.id("1"); String jsonString = "{" + "\"name\":\"John\"," + "\"age\":30," + "\"city\":\"New York\"" + "}"; request.source(jsonString, XContentType.JSON); IndexResponse response = client.index(request, RequestOptions.DEFAULT); ``` 5. 搜索文档: ``` SearchRequest request = new SearchRequest("my_index"); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.matchQuery("name", "John")); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); ``` 这是一个简单的示例,实际使用中还可以使用更多的API来操作Elasticsearch
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值