ElasticSearch, Kibana
Request Body Search 的语法格式POST(或GET) 索引名称/_search{ query:{ 查询参数 } 其他查询控制参数...... }注意,request body search 支持 POST 和 GET 两种请求方法。
_source 过滤如果文档原始内容包含的信息特别多,在 request body search中我们可以使用 _source 过滤的方式,让返回结果文档的 _source 原始数据部分只包含部分信息
通过脚本构建新字段通过 ElasticSearch 提供的 painless 脚本,我们可以在搜索返回结果中,基于已有字段和相应的逻辑构建一个新字段, 示例脚本片段如下(我们创建的新字段名称为 hellomy ):'script_fields': { 'hellomy': { 'script': { 'lang': 'painless', 'source': ''hello_'+doc['title.keyword'].value+'_' +doc['year'].value' } } }注意,在使用了脚本定义字段后,_source 文档原始数据字段在返回结果中就默认删除了,如果还要展示 _source 字段,则需要我们通过_source 指定返回哪些字段。
MatchQuery 的默认使用在 request body search 中,MatchQuery 就类似 URI search 中的 TermQuery,其对应的查询脚本片段为:'query': { 'match': { '指定字段': { 'query': '查询串' }, } }注意,MatchQuery 只能针对一个字段进行查询
MatchQuery 指定匹配操作符在上一步骤的图示中可以看出,MatchQuery 对于查询串中多个词语(term)间默认是 or (或)的关系,即我们查询串 title = beautiful mind , 其含义是 title = beautiful or title = mind, 并且不同于 URI 的 TermQuery, 这里的 MatchQuery 的查询串中不支持 AND OR NOT 布尔运算, 那如何实现同时包含的查询操作呢?通过 operator 来指定。
MatchPhraseQuery 的使用和 URI Search 中的 PhraseQuery 类似,request body search 提供了 MatchPhraseQuery,其基本语法为:'query': { 'match_phrase': { '指定字段': { 'query': '查询字符串' , 'slop': 1 } } }注意:和 MatchQuery 一样,MatchPhraseQuery 同样只支持一个指定字段的查询,可以通过参数 'slop' 的方式指定查询字符串的各个词语(term)之间最多可以相隔几个词语,如果不指定 “slop”,默认必须完整匹配整个查询字符串!