Elasticsearch Search API之(Request Body Search 查询主体)

这篇具有很好参考价值的文章主要介绍了Elasticsearch Search API之(Request Body Search 查询主体)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • sentence

句子,使用Java的BreakIterator确定的下一个句子边界处的突出显示片段。您可以使用boundary_scanner_locale指定要使用的区域设置。unified highlighter高亮器默认行为。

  • word

单词,由Java的BreakIterator确定的下一个单词边界处高亮显示的片段。

  • boundary_scanner_locale

区域设置。该参数采用语言标记的形式,例如。“en - us”、“- fr”、“ja-JP”。更多信息可以在Locale语言标记文档中找到。默认值是local . root。

  • encoder

指示代码段是否应该编码为HTML:默认(无编码)或HTML (HTML-转义代码段文本,然后插入高亮标记)。

  • fields

指定要检索高亮显示的字段,支持通配符。例如,您可以指定comment_*来获得以comment_开头的所有文本和关键字字段的高亮显示。

注意:当您使用通配符时,只会匹配text、keyword类型字段。

  • force_source

是否强制从_source高亮显示,默认为false。其实默认情况就是根据源字段内容(_source)内容高亮显示,即使字段是单独存储的。

  • fragmenter

指定如何在高亮显示代码片段中拆分文本:可选值为simple、span。仅适用于Plain highlighting。默认为span。

  • simple

将文本分成大小相同的片段。

  • span

将文本分割成大小相同的片段,但尽量避免在突出显示的术语之间分割文本。这在查询短语时很有用。

  • fragment_offset

控制开始高亮显示的margin(空白),仅适用于fast vector highlighter。

  • fragment_size

高亮显示的片段,默认100。

  • highlight_query

高亮显示匹配搜索查询以外的查询。如果您使用rescore查询,这尤其有用,因为默认情况下高亮显示并不会考虑这些查询。通常,应该将搜索查询包含在highlight_query中。

  • matched_fields

组合多个字段上的匹配项以突出显示单个字段。对于以不同方式分析相同字符串的多个字段,这是最直观的。所有matched_fields必须将term_vector设置为with_positions_offset,但是只加载匹配项组合到的字段,所以建议该字段store设置为true。只适用于fast vector highlighter荧光笔。

  • no_match_size

如果没有要高亮显示的匹配片段,则希望从字段开头返回的文本数量。默认值为0(不返回任何内容)。

  • number_of_fragments

返回的高亮显示片段的最大数量。如果片段的数量设置为0,则不返回片段。默认为5。

  • order

该值默认为none,按照字段的顺序返回高亮文档,可以设置为score(按相关性排序)。

  • phrase_limit

控制要考虑的文档中匹配短语的数量。防止fast vector highlighter分析太多的短语和消耗太多的内存。在使用matched_fields时,将考虑每个匹配字段的phrase_limit短语。提高限制会增加查询时间并消耗更多内存。只支持fast vector highlighter。默认为256。

  • pre_tags

用于高亮显示HTML标签,与post_tags一起使用,默认用_高亮显示文本_。

  • post_tags

用于高亮显示HTML标签,与pre_tags一起使用,默认用_高亮显示文本_。

  • require_field_match

默认情况下,只有包含查询匹配的字段才会高亮显示。将require_field_match设置为false以突出显示所有字段。默认值为true。

  • tags_schema

定义高亮显示样式,例如_。_

  • type

指定高亮显示器,可选值:unified、plain、fvh。默认值为unified。

7.4 高亮显示demo

public static void testSearch_highlighting() {

RestHighLevelClient client = EsClient.getClient();

try {

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices(“map_highlighting_01”);

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

sourceBuilder.query(

// QueryBuilders.matchAllQuery()

QueryBuilders.termQuery(“context”, “身份证”)

);

HighlightBuilder highlightBuilder = new HighlightBuilder();

highlightBuilder.field(“context”);

sourceBuilder.highlighter(highlightBuilder);

searchRequest.source(sourceBuilder);

System.out.println(client.search(searchRequest, RequestOptions.DEFAULT));

} catch (Exception e) {

// TODO: handle exception

}

}

其返回值如下:

{

“took”:2,

“timed_out”:false,

“_shards”:{

“total”:5,

“successful”:5,

“skipped”:0,

“failed”:0

},

“hits”:{

“total”:1,

“max_score”:0.2876821,

“hits”:[

{

“_index”:“map_highlighting_01”,

“_type”:“_doc”,

“_id”:“erYsbmcBeEynCj5VqVTI”,

“_score”:0.2876821,

“_source”:{

“context”:“城中西路可以受理外地二代身份证的办理。”

},

“highlight”:{ // @1

“context”:[

“城中西路可以受理外地二代身份证的办理。”

]

}

}

]

}

}

这里主要对highlight再做一次说明,其中每一个字段返回的内容是对应原始数据的子集,最多fragmentSize个待关键字的匹配条目,通常,在页面上显示文本时,应该用该字段取代原始值,这样才能有高亮显示的效果。

8、Rescoring

重打分机制。一个查询首先使用高效的算法查找文档,然后对返回结果的top n 文档运用另外的查询算法,通常这些算法效率低效但能提供匹配精度。

resoring查询与原始查询分数的合计方式如下:

  • total

两个评分相加

  • multiply

将原始分数乘以rescore查询分数。用于函数查询重定向。

  • avg

取平均数

  • max

取最大值

  • min

取最小值。

9、Search Type

查询类型,可选值:QUERY_THEN_FETCH、QUERY_AND_FETCH、DFS_QUERY_THEN_FETCH。默认值:query_then_fetch。

  • QUERY_THEN_FETCH:首先根据路由算法向相关分片(多个)发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然后对各个分片的结果进行汇聚,排序,然后选取客户端指定需要获取的数据条数(top n),然后根据documentId再向各个分片请求具体的文档信息。

  • QUERY_AND_FETCH:在5.4.x版本开始废弃,是直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚全部返回给客户端,返回的数据为客户端请求数量size * (路由后的分片数量)。

  • DFS_QUERY_THEN_FETCH:在开始向各个节点发送请求之前,会进行一次词频、相关性的计算,后续流程与QUERY_THEN_FETCH相同,可以看出,该查询类型的文档相关性会更高,但性能比QUERY_THEN_FETCH要差。

10、scroll

滚动查询。es另外一种分页方式。虽然搜索请求返回结果的单个“页面”,但scroll API可以用于从单个搜索请求检索大量结果(甚至所有结果),这与在传统数据库上使用游标的方式非常相似。scroll api不用于实时用户请求,而是用于处理大量数据,例如为了将一个索引的内容重新索引到具有不同配置的新索引中。

10.1 如何使用scroll API

scroll API使用分为两步:

1、第一步,首先通过scroll参数,指定该滚动查询(类似于数据库的游标的存活时间)

POST /twitter/_search?scroll=1m

{

“size”: 100,

“query”: {

“match” : {

“title” : “elasticsearch”

}

}

}

该方法会返回一个重要的参数:scrollId。

2、第二步,使用该scrollId去es服务器拉取下一批(下一页数据)

POST /_search/scroll

{

“scroll” : “1m”,

“scroll_id” : “DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==”

}

循环第三步,可以循环批量处理数据。

3、第三步,清除scrollId,类似于清除数据库游标,快速释放资源。

DELETE /_search/scroll

{

“scroll_id” : “DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==”

}

下面给出scoll api的java版本示例程序:

public static void testScoll() {

RestHighLevelClient client = EsClient.getClient();

String scrollId = null;

try {

System.out.println("step 1 start ");

// step 1 start

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices(“map_highlighting_01”);

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

sourceBuilder.query(

QueryBuilders.termQuery(“context”, “身份证”)

);

searchRequest.source(sourceBuilder);

searchRequest.scroll(TimeValue.timeValueMinutes(1));

SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);

scrollId = result.getScrollId();

// step 1 end

// step 2 start

if(!StringUtils.isEmpty(scrollId)) {

System.out.println("step 2 start ");

SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);

scrollRequest.scroll(TimeValue.timeValueMinutes(1));

while(true) { //循环遍历

SearchResponse scollResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);

if(scollResponse.getHits().getHits() == null ||

scollResponse.getHits().getHits().length < 1) {

break;

}

scrollId = scollResponse.getScrollId();

// 处理文档

scrollRequest.scrollId(scrollId);

}

// step 2 end

}

System.out.println(result);

} catch (Exception e) {

e.printStackTrace();

} finally {

if(!StringUtils.isEmpty(scrollId)) {

System.out.println("step 3 start ");

// step 3 start

ClearScrollRequest clearScrollRequest = new ClearScrollRequest();

clearScrollRequest.addScrollId(scrollId);

try {

client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// step 3 end

}

}

}

这里重点阐述一下第一次查询时,不仅返回scrollId,也会返回第一批数据。

10.2 Keeping the search context alive

scroll参数(传递给搜索请求和每个滚动请求)告诉Elasticsearch它应该保持搜索上下文活动多长时间。它的值(例如1m,参见Time unitsedit)不需要足够长的时间来处理所有数据——它只需要足够长的时间来处理前一批结果。每个scroll请求(带有scroll参数)设置一个新的过期时间。如果scroll请求没有传入scroll,那么搜索上下文将作为scroll请求的一部分被释放。scroll其内部实现类似于快照,当第一次收到一个scroll请求时,就会为该搜索上下文所匹配的结果创建一个快照,随后文档的变化并不会反映到该API的结果。

10.3 sliced scroll

对于返回大量文档的scroll查询,可以将滚动分割为多个可以独立使用的片,通过slice指定。

例如:

GET /twitter/_search?scroll=1m // @1

{

“slice”: { // @11

“id”: 0, // @12

“max”: 2 // @13

},

“query”: {

“match” : {

“title” : “elasticsearch”

}

}

}

GET /twitter/_search?scroll=1m // @2

{

“slice”: {

“id”: 1,

“max”: 2

},

“query”: {

“match” : {

“title” : “elasticsearch”

}

}

}

@1,@2两个并列的查询,按分片去查询。

@11:通过slice定义分片查询。

@12:该分片查询的ID。

@13:本次查询总片数。

这个机制非常适合多线程处理数据。

具体分片机制是,首先将请求转发到各分片节点,然后在每个节点使用匹配到的文档(hashcode(_uid)%slice片数),然后各分片节点返回数据到协调节点。也就是默认情况下,分片是根据文档的_uid,为了提高分片过程,可以通过如下方式进行优化,并指定分片字段。

  • 分片字段类型为数值型。

  • 字段的doc_values设置为true。

  • 每个文档中都索引了该字段。

  • 该字段值只在创建时赋值,并不会更新。

  • 字段的基数应该很高(相当于数据库索引选择度),这样能确保每个片返回的数据相当,数据分布较均匀。

注意,默认slice片数最大为1024,可以通过索引设置项index.max_slices_per_scroll来改变默认值。

例如:

GET /twitter/_search?scroll=1m

{

“slice”: {

“field”: “date”,

“id”: 0,

“max”: 10

},

“query”: {

“match” : {

“title” : “elasticsearch”

}

}

}

11、preference

查询选择副本分片的倾向性(即在一个复制组中选择副本的分片值。默认情况下,Elasticsearch以未指定的顺序从可用的碎片副本中进行选择,副本之间的路由将在集群章节更加详细的介绍 。可以通过该字段指定分片倾向与选择哪个副本。

preference可选值:

  • _primary

只在节点上执行,在6.1.0版本后废弃,将在7.x版本移除。

  • _primary_first

优先在主节点上执行。在6.1.0版本后废弃,将在7.x版本移除。

  • _replica

操作只在副本分片上执行,如果有多个副本,其顺序随机。在6.1.0版本后废弃,将在7.x版本移除。

  • _replica_first

优先在副本分片上执行,如果有多个副本,其顺序随机。在6.1.0版本后废弃,将在7.x版本移除。

  • _only_local

操作将只在分配给本地节点的分片上执行。_only_local选项保证只在本地节点上使用碎片副本,这对于故障排除有时很有用。所有其他选项不能完全保证在搜索中使用任何特定的碎片副本,而且在索引更改时,这可能意味着如果在处于不同刷新状态的不同碎片副本上执行重复搜索,则可能产生不同的结果。

  • _local

优先在本地分片上执行。

  • _prefer_nodes:abc,xyz

优先在指定节点ID的分片上执行,示例中的节点ID为abc、xyz。

  • _shards:2,3

将操作限制到指定的分片上执行。(这里是2和3)这个首选项可以与其他首选项组合,但必须首先出现:_shards:2,3|_local。

  • _only_nodes:abc*,x*yz,…

根据节点ID进行限制。

  • Custom (string) value

自定义字符串,其路由为 hashcode(该值)%赋值组内节点数。例如在web应用中通常以sessionId为倾向值。

12、explain

是否解释各分数是如何计算的。

GET /_search

{

“explain”: true,

“query” : {

“term” : { “user” : “kimchy” }

}

}

13、version

如果设置为true,则返回每个命中文档的当前版本号。

GET /_search

{

“version”: true,

“query” : {

“term” : { “user” : “kimchy” }

}

}

14、Index Boost

当搜索多个索引时,允许为每个索引配置不同的boost级别。当来自一个索引的点击率比来自另一个索引的点击率更重要时,该属性则非常方便。

使用示例如下:

GET /_search

{

“indices_boost” : [

{ “alias1” : 1.4 },

{ “index*” : 1.3 }

]

}

15、min_score

指定返回文档的最小评分,如果文档的评分低于该值,则不返回。

GET /_search

{

“min_score”: 0.5,

“query” : {

“term” : { “user” : “kimchy” }

}

}

16、Named Queries

每个过滤器和查询都可以在其顶级定义中接受_name。搜索响应中每个匹配文档中会增加matched_queries结构体,记录该文档匹配的查询名称。查询和筛选器的标记只对bool查询有意义。

java示例如下:

public static void testNamesQuery() {

RestHighLevelClient client = EsClient.getClient();

try {

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices(“esdemo”);

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

sourceBuilder.query(

QueryBuilders.boolQuery()

.should(QueryBuilders.termQuery(“context”, “fox”).queryName(“q1”))

.should(QueryBuilders.termQuery(“context”, “brown”).queryName(“q2”))

);

searchRequest.source(sourceBuilder);

SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);

System.out.println(result);

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

返回结果如下:

{

“took”:4,

“timed_out”:false,

“_shards”:{

“total”:5,

“successful”:5,

“skipped”:0,

“failed”:0

},

“hits”:{

“total”:2,

“max_score”:0.5753642,

“hits”:[

{

“_index”:“esdemo”,

“_type”:“matchquerydemo”,

“_id”:“2”,

“_score”:0.5753642,

“_source”:{

“context”:“My quick brown as fox eats rabbits on a regular basis.”,

“title”:“Keeping pets healthy”

},

“matched_queries”:[

“q1”,

“q2”

]

},

{

“_index”:“esdemo”,

“_type”:“matchquerydemo”,

“_id”:“1”,

“_score”:0.39556286,

“_source”:{

“context”:“Brown rabbits are commonly seen brown.”,

“title”:“Quick brown rabbits”

},

“matched_queries”:[

“q2”

]

}

]

}

}

正如上面所说,每个匹配文档中都包含matched_queries,表明该文档匹配的是哪个查询条件。

17、Inner hits

用于定义内部嵌套层的返回规则,其inner hits支持如下选项:

  • from 用于内部匹配的分页。

  • size 用于内部匹配的分页,size。

  • sort 排序策略。

  • name 为内部嵌套层定义的名称。

该部分示例将在下节重点阐述。

18、field collapsing(字段折叠)

允许根据字段值折叠搜索结果。折叠是通过在每个折叠键上只选择排序最高的文档来完成的。有点类似于聚合分组,其效果类似于按字段进行分组,默认命中的文档列表第一层由该字段的第一条信息,也可以通过允许根据字段值折叠搜索结果。折叠是通过在每个折叠键上只选择排序最高的文档来完成的。例如,下面的查询为每个用户检索最佳tweet,并按喜欢的数量对它们进行排序。

下面首先通过示例进行展示field collapsing的使用。

1)首先查询发的推特内容中包含elasticsearch的推文:

GET /twitter/_search

{

“query”: {

“match”: {

“message”: “elasticsearch”

}

},

“collapse” : {

“field” : “user”

},

“sort”: [“likes”]

}

返回结果:

{

“took”:8,

“timed_out”:false,

“_shards”:{

“total”:5,

“successful”:5,

“skipped”:0,

“failed”:0

},

“hits”:{

“total”:5,

“max_score”:null,

“hits”:[

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“OYnecmcB-IBeb8B-bF2X”,

“_score”:null,

“_source”:{

“message”:“to be a elasticsearch”,

“user”:“user2”,

“likes”:3

},

“sort”:[

3

]

},

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“OonecmcB-IBeb8B-bF2q”,

“_score”:null,

“_source”:{

“message”:“to be elasticsearch”,

“user”:“user2”,

“likes”:3

},

“sort”:[

3

]

},

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“OInecmcB-IBeb8B-bF2G”,

“_score”:null,

“_source”:{

“message”:“elasticsearch is very high”,

“user”:“user1”,

“likes”:3

},

“sort”:[

3

]

},

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“O4njcmcB-IBeb8B-Rl2H”,

“_score”:null,

“_source”:{

“message”:“elasticsearch is high db”,

“user”:“user1”,

“likes”:1

},

“sort”:[

1

]

},

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“N4necmcB-IBeb8B-bF0n”,

“_score”:null,

“_source”:{

“message”:“very likes elasticsearch”,

“user”:“user1”,

“likes”:1

},

“sort”:[

1

]

}

]

}

}

首先上述会列出所有用户的推特,如果只想每个用户只显示一条推文,并且点赞率最高,或者每个用户只显示2条推文呢?

这个时候,按字段折叠就闪亮登场了。

java demo如下:

public static void search_field_collapsing() {

RestHighLevelClient client = EsClient.getClient();

try {

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices(“mapping_field_collapsing_twitter”);

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

sourceBuilder.query(

QueryBuilders.matchQuery(“message”,“elasticsearch”)

);

sourceBuilder.sort(“likes”, SortOrder.DESC);

CollapseBuilder collapseBuilder = new CollapseBuilder(“user”);

sourceBuilder.collapse(collapseBuilder);

searchRequest.source(sourceBuilder);

SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);

System.out.println(result);

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

其结果如下:

{

“took”:22,

“timed_out”:false,

“_shards”:{

“total”:5,

“successful”:5,

“skipped”:0,

“failed”:0

},

“hits”:{

“total”:5,

“max_score”:null,

“hits”:[

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“OYnecmcB-IBeb8B-bF2X”,

“_score”:null,

“_source”:{

“message”:“to be a elasticsearch”,

“user”:“user2”,

“likes”:3

},

“fields”:{

“user”:[

“user2”

]

},

“sort”:[

3

]

},

{

“_index”:“mapping_field_collapsing_twitter”,

“_type”:“_doc”,

“_id”:“OInecmcB-IBeb8B-bF2G”,

“_score”:null,

“_source”:{

“message”:“elasticsearch is very high”,

“user”:“user1”,

“likes”:3

},

“fields”:{

“user”:[

“user1”

]

},

“sort”:[

3

]

}

]

}

}

上面的示例只返回了每个用户的第一条数据,如果需要每个用户返回2条数据呢?可以通过inner_hit来设置。

public static void search_field_collapsing() {

RestHighLevelClient client = EsClient.getClient();

try {

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices(“mapping_field_collapsing_twitter”);

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

sourceBuilder.query(

QueryBuilders.matchQuery(“message”,“elasticsearch”)

);

sourceBuilder.sort(“likes”, SortOrder.DESC);

CollapseBuilder collapseBuilder = new CollapseBuilder(“user”);

InnerHitBuilder collapseHitBuilder = new InnerHitBuilder(“collapse_inner_hit”);

collapseHitBuilder.setSize(2);

collapseBuilder.setInnerHits(collapseHitBuilder);

sourceBuilder.collapse(collapseBuilder);

searchRequest.source(sourceBuilder);

SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);

System.out.println(result);

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
der.collapse(collapseBuilder);

searchRequest.source(sourceBuilder);

SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);

System.out.println(result);

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-LbS2yhuQ-1711967282022)]

[外链图片转存中…(img-4TgoB8Cj-1711967282023)]

[外链图片转存中…(img-vR4epAFB-1711967282023)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

Elasticsearch Search API之(Request Body Search 查询主体),程序员,elasticsearch,python,jenkins

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

[外链图片转存中…(img-pdgElrW3-1711967282024)]

[外链图片转存中…(img-IE8YKhtd-1711967282025)]

[外链图片转存中…(img-EoCP9Nm8-1711967282025)]

[外链图片转存中…(img-968jl5Fa-1711967282025)]

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

[外链图片转存中…(img-5S03FJl3-1711967282026)]

[外链图片转存中…(img-RT8Np3zr-1711967282027)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-845664.html

到了这里,关于Elasticsearch Search API之(Request Body Search 查询主体)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elastic Search的RestFul API入门:如何进行ES的查询-search

    在这篇教学文章中,我们将深入探讨Elasticsearch的search功能。这是一个非常强大且灵活的功能,它允许我们对存储在Elasticsearch中的数据进行各种复杂的查询和分析。本章的目标是让读者理解如何进行Elasticsearch的搜索,以及如何在搜索过程中自主调整搜索参数,从而灵活地控制

    2024年02月03日
    浏览(50)
  • Elasticsearch ES 简单查询 Query String Search 入门

    尝试了text类型排序需要特别处理下. \\\"reason\\\" : \\\"Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index.

    2024年02月16日
    浏览(45)
  • elasticsearch 深度分页查询 Search_after(图文教程)

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 search_after 是 Elasticsearch 提供的一种分页查询方式,它可以用来在已经排序的结果集中进行分页查询。 search_after查询步骤如下(下面有具体的例子帮助理解):

    2024年04月11日
    浏览(48)
  • Java客户端调用elasticsearch进行深度分页查询 (search_after)

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 具体的Search_after解释,可以看我这篇文章 elasticsearch 深度分页查询 Search_after(图文教程) 参考:https://blog.csdn.net/qq_44056652/article/details/126341810 作者:神的孩子

    2024年03月22日
    浏览(52)
  • Spring Data访问Elasticsearch----查询方法,程序员必学

    例子 Elasticsearch查询字符串 And findByNameAndPrice { “query” : {“bool” : {“must” : [{ “query_string” : { “query” : “?”, “fields” : [ “name” ] } },{“query_string” : { “query” : “?”, “fields” : [ “price” ] } }]}}} Or findByNameOrPrice {“query”:{“bool”:{“should”:[{“query_string”

    2024年04月14日
    浏览(64)
  • ElasticSearch第六讲 ES 三种分页查询from+size / Scroll /search_after

    我的Git地址:https://gitee.com/ITLULU 欢迎访问 ES的分页查询和关系数据库的分页查询的区别: ES分页查询有以下几种: 1:简单的 from size (有默认的最大Size,不可无限大小查询,因为数据过多查询性能会降低,且也要考虑内存问题,以及OS缓存数据的能力) 2: scroll基于查询窗口

    2024年02月01日
    浏览(54)
  • Request Body数据读取

    拦截器要读取request body数据的话需要注意一个问题,一旦拦截器把数据流从request读取出来后,后区的接口层就拿不到数据了,因为流是一次性的,那么要解决这个问题,我们就需要在拦截器取出流拿到数据后重新将数据放回流,这样后面的接口层就能正常获取到数据了 下面

    2024年02月09日
    浏览(41)
  • golang多次读取http request body问题分析

    使用postman发送了一个http请求,对每个请求都有一个对应的context: 其中Request成员变量是golang1.17.3版本http库中定义的Request结构(这里贴出部分成员变量): 请求处理的代码使用ReadAll方法读取Request.Body,debug发现读取出来的字节切片为空: 我把这个问题发给了gpt gpt回答说可能

    2024年03月10日
    浏览(62)
  • HttpMessageNotReadableException: Required request body is missing:

    完整错误: Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.Object com.example.sx.study.Econtroller.test1(com.example.sx.study.Entity,org.springframework.validation.BindingResult)] 解决办法: 在@RequestBody后加上( required = false ) 虽然通过此方法的确返回了

    2023年04月08日
    浏览(44)
  • Required request body is missing 错误解决

    测试接口报了这个问题:Required request body is missing。因为我使用的是GET请求 然后controller中的方法接收的参数使用了@RequestBody 注解 例如:会报Required request body is missing 因为Get请求发送数据的方式不是json格式,所以当我们使@RequsetBody封装Get请求的数据时就会出现无法获取到数据

    2024年02月07日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包