多语言展示
当前在线:1997今日阅读:19今日分享:20

ElasticSearch学习--Request Body Search的介绍

相比 URI Search, Request Body Search 是 ElasticSearch 提供的搜索高阶用法,在其搜索体中,可以使用ES提供的 DSL(Domain Specific Language)实现很多高级的搜索模式,这篇经验就分享一下Request Body Search的基本介绍和简单应用。
工具/原料

ElasticSearch, Kibana

方法/步骤
1

Request Body Search 的语法格式POST(或GET) 索引名称/_search{        query:{              查询参数         }        其他查询控制参数...... }注意,request body search 支持 POST 和 GET 两种请求方法。

2

_source 过滤如果文档原始内容包含的信息特别多,在 request body search中我们可以使用 _source 过滤的方式,让返回结果文档的 _source 原始数据部分只包含部分信息

3

通过脚本构建新字段通过 ElasticSearch 提供的 painless 脚本,我们可以在搜索返回结果中,基于已有字段和相应的逻辑构建一个新字段, 示例脚本片段如下(我们创建的新字段名称为 hellomy ):'script_fields': {     'hellomy': {       'script': {         'lang': 'painless',         'source': ''hello_'+doc['title.keyword'].value+'_' +doc['year'].value'       }     }   }注意,在使用了脚本定义字段后,_source 文档原始数据字段在返回结果中就默认删除了,如果还要展示 _source 字段,则需要我们通过_source 指定返回哪些字段。

4

MatchQuery 的默认使用在 request body search 中,MatchQuery 就类似 URI search 中的 TermQuery,其对应的查询脚本片段为:'query': {     'match': {           '指定字段': {                 'query': '查询串'          },    }   }注意,MatchQuery 只能针对一个字段进行查询

5

MatchQuery 指定匹配操作符在上一步骤的图示中可以看出,MatchQuery 对于查询串中多个词语(term)间默认是 or (或)的关系,即我们查询串 title = beautiful mind , 其含义是 title = beautiful or title = mind, 并且不同于 URI 的 TermQuery, 这里的 MatchQuery 的查询串中不支持 AND OR NOT 布尔运算, 那如何实现同时包含的查询操作呢?通过 operator 来指定。

6

MatchPhraseQuery 的使用和 URI Search 中的 PhraseQuery 类似,request body search 提供了 MatchPhraseQuery,其基本语法为:'query': {     'match_phrase': {       '指定字段': {         'query': '查询字符串'         , 'slop': 1       }     }   }注意:和 MatchQuery 一样,MatchPhraseQuery 同样只支持一个指定字段的查询,可以通过参数 'slop' 的方式指定查询字符串的各个词语(term)之间最多可以相隔几个词语,如果不指定 “slop”,默认必须完整匹配整个查询字符串!

推荐信息