文档章节

elasticsearch search API

watermelon11
 watermelon11
发布于 2018/11/09 12:04
字数 2814
阅读 21
收藏 0

本文参考官方提供api提炼出来的

https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html

URI查询

elasticsearch可以通过提供请求参数纯粹使用URI来执行搜索请求。

GET twitter/_search?q=user:kimchy
名称 描述

q

查询字符串(映射到query_string查询,有关详细信息,请参阅 查询字符串查询)。

df

在查询中未定义字段前缀时使用的默认字段。

analyzer

分析查询字符串时要使用的分析器名称。

analyze_wildcard

是否应分析通配符和前缀查询。默认为false

batched_reduce_size

应在协调节点上一次减少的分片结果数。如果请求中潜在的分片数量很大,则应将此值用作保护机制,以减少每个搜索请求的内存开销。

default_operator

要使用的默认运算符可以是AND或 OR。默认为OR

lenient

如果设置为true将导致忽略基于格式的失败(如向数字字段提供文本)。默认为false。

explain

对于每个命中,包含如何计算命中得分的解释。

_source

设置为false禁用_source字段检索。您还可以使用_source_include&检索部分文档_source_exclude( 有关详细信息,请参阅请求正文文档)

stored_fields

每个匹配返回的文档的选择性存储字段,逗号分隔。不指定任何值将导致没有字段返回。

sort

排序执行。可以是fieldName或 fieldName:asc/ 的形式fieldName:desc。fieldName可以是文档中的实际字段,也可以是特殊_score名称,表示基于分数的排序。可以有几个sort参数(顺序很重要)。

track_scores

排序时,设置为true仍然跟踪分数并将其作为每个匹配的一部分返回。

track_total_hits

设置为false禁用跟踪与查询匹配的匹配总数。(有关详细信息,请参阅索引排序)。默认为true。

timeout

搜索超时,将搜索请求限制在指定的时间值内执行,并使用在到期时累积的点击数进行保释。默认为无超时。

terminate_after

在达到查询执行将提前终止时,为每个分片收集的最大文档数。如果设置,响应将具有一个布尔字段,terminated_early以指示查询执行是否实际上已终止。默认为no terminate_after。

from

从命中的索引开始返回。默认为0

size

要返回的点击次数。默认为10

search_type

要执行的搜索操作的类型。可以是 dfs_query_then_fetchquery_then_fetch。默认为query_then_fetch。有关可以执行的不同搜索类型的更多详细信息,请参阅 搜索类型

allow_partial_search_results

false如果请求将产生部分结果,则设置为返回整体故障。默认为true,这将允许在超时或部分失败的情况下获得部分结果。

Requet Body搜索

Requet Body请求可以在其主体内使用包括查询DSL的搜索DSL来执行。

GET /twitter/_search
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

timeout

搜索超时,将搜索请求限制在指定的时间值内执行,并使用在到期时累积的点击数进行保释。使用“ 搜索取消” 编辑机制在达到超时后取消搜索请求。默认为无超时。请参阅时间单位编辑

from

从某个偏移量中检索命中。默认为0

size

要返回的点击次数。默认为10。如果您不关心某些匹配,但只关注匹配和/或聚合的数量,将值设置为0有助于提高性能。

search_type

要执行的搜索操作的类型。可以是 dfs_query_then_fetchquery_then_fetch。默认为query_then_fetch。请参阅搜索类型以获取更多

request_cache

设置为truefalse启用或禁用对于size为0的请求的搜索结果的缓存,即聚合和建议(未返回顶部命中)。请参阅Shard请求缓存

allow_partial_search_results

false如果请求将产生部分结果,则 设置为返回整体故障。默认为true,这将在超时或部分失败的情况下允许部分结果。

terminate_after

在达到查询执行将提前终止时,为每个分片收集的最大文档数。如果设置,响应将具有一个布尔字段,terminated_early以指示查询执行是否实际上已终止。默认为no terminate_after。

batched_reduce_size

应在协调节点上一次减少的分片结果数。如果请求中潜在的分片数量很大,则应将此值用作保护机制,以减少每个搜索请求的内存开销。

Query

搜索请求主体中的查询元素允许使用查询DSL定义查询。

GET /_search
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

From/Size

结果的分页可以通过使用fromsize 参数来完成。该from参数定义要获取的第一个结果的偏移量。该size参数允许您配置要返回的最大命中数。

GET /_search
{
    "from" : 0, "size" : 10,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

Sort

允许在特定字段上添加一个或多个排序。每种类型也可以反转。排序是在每个字段级别定义的,具有用于_score按分数排序的特殊字段名称,以及_doc按索引顺序排序。

GET /my_index/_search
{
    "sort" : [
        { "post_date" : {"order" : "asc"}},
        "user",
        { "name" : "desc" },
        { "age" : "desc" },
        "_score"
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

在_score上排序时,顺序默认为desc,在排序其他任何内容时默认为asc

asc

按升序排序

desc

按降序排序

Elasticsearch支持按数组或多值字段进行排序。 mode选项控制选择哪个数组值以对其所属的文档进行排序。 mode选项可以具有以下值

min

选择最低值。

max

选择最高价值。

sum

使用所有值的总和作为排序值。仅适用于基于数字的数组字段。

avg

使用所有值的平均值作为排序值。仅适用于基于数字的数组字段。

median

使用所有值的中位数作为排序值。仅适用于基于数字的数组字段。

Elasticsearch还支持按一个或多个嵌套对象内的字段进行排序。 嵌套字段支持的排序具有嵌套排序选项,具有以下属性:

path 定义要排序的嵌套对象。实际排序字段必须是此嵌套对象中的直接字段。按嵌套字段排序时,此字段是必填字段。
filter 嵌套路径中的内部对象应与之匹配的过滤器,以便通过排序考虑其字段值。常见的情况是在嵌套过滤器或查询中重复查询/过滤。默认情况下,没有nested_filter活动。
nested 与顶级相同,nested但适用于当前嵌套对象中的另一个嵌套路径。
POST /_search
{
   "query" : {
      "term" : { "product" : "chocolate" }
   },
   "sort" : [
       {
          "offer.price" : {
             "mode" :  "avg",
             "order" : "asc",
             "nested": {
                "path": "offer",
                "filter": {
                   "term" : { "offer.color" : "blue" }
                }
             }
          }
       }
    ]
}
POST /_search
{
   "query": {
      "nested": {
         "path": "parent",
         "query": {
            "bool": {
                "must": {"range": {"parent.age": {"gte": 21}}},
                "filter": {
                    "nested": {
                        "path": "parent.child",
                        "query": {"match": {"parent.child.name": "matt"}}
                    }
                }
            }
         }
      }
   },
   "sort" : [
      {
         "parent.child.age" : {
            "mode" :  "min",
            "order" : "asc",
            "nested": {
               "path": "parent",
               "filter": {
                  "range": {"parent.age": {"gte": 21}}
               },
               "nested": {
                  "path": "parent.child",
                  "filter": {
                     "match": {"parent.child.name": "matt"}
                  }
               }
            }
         }
      }
   ]
}

Source过滤

允许控制_source每次点击返回字段的方式。

默认情况下,_source除非您使用了stored_fields参数或_source禁用了字段,否则操作将返回字段的内容。

您可以_source使用以下_source参数关闭检索:

要禁用_source检索设置为false

GET /_search
{
    "_source": false,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
GET /_search
{
    "_source": {
        "includes": [ "obj1.*", "obj2.*" ],
        "excludes": [ "*.description" ]
    },
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

Script Fields

允许为每个匹配返回脚本评估(基于不同的字段)

GET /_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "test1" : {
            "script" : {
                "lang": "painless",
                "source": "doc['price'].value * 2"
            }
        },
        "test2" : {
            "script" : {
                "lang": "painless",
                "source": "doc['price'].value * params.factor",
                "params" : {
                    "factor"  : 2.0
                }
            }
        }
    }
}

脚本字段可以处理未存储的字段(my_field_name在上面的例子中),并允许返回要返回的自定义值(脚本的评估值)。

Doc value Fields

允许为每个匹配返回字段的doc值表示

GET /_search
{
    "query" : {
        "match_all": {}
    },
    "docvalue_fields" : [
        {
            "field": "my_ip_field",
            "format": "use_field_mapping"
        },
        {
            "field": "my_date_field",
            "format": "epoch_millis"
        }
    ]
}

Post filter 后过滤器

在已经计算聚合之后,将post_filter其应用于hits搜索请求最末端的搜索。

GET /shirts/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": { "brand": "gucci" }
      }
    }
  },
  "aggs": {
    "colors": {
      "terms": { "field": "color" }
    },
    "color_red": {
      "filter": {
        "term": { "color": "red" }
      },
      "aggs": {
        "models": {
          "terms": { "field": "model" }
        }
      }
    }
  },
  "post_filter": {
    "term": { "color": "red" }
  }
}

当你需要对搜索结果和聚合结果做不同的过滤时,你才应该使用 post_filter , 有时用户会在普通搜索使用 post_filter 。

不要这么做! post_filter 的特性是在查询 之后 执行,任何过滤对性能带来的好处(比如缓存)都会完全失去。

在我们需要不同过滤时, post_filter 只与聚合一起使用。

Rescoring

重新排序可以通过使用辅助(通常更昂贵)算法重新排序由query和和 post_filter阶段返回的顶部(例如100-500)文档来提高精度 ,而不是将昂贵的算法应用于索引中的所有文档。

rescore它返回其结果,以通过处理整体搜索请求的节点进行排序之前请求是在每个碎片执行。

目前,rescore API只有一个实现:查询rescorer,它使用查询来调整评分。

查询rescorer仅对query和和 post_filter阶段返回的Top-K结果执行第二个查询。每个分片上将检查的文档数量可以通过window_size参数控制,默认值为10。

默认情况下,原始查询和rescore查询的分数将线性组合,以生成_score每个文档的最终结果。原始查询和rescore查询的相对重要性可以 分别用query_weight和控制rescore_query_weight。两者都默认为1

POST /_search
{
   "query" : {
      "match" : {
         "message" : {
            "operator" : "or",
            "query" : "the quick brown"
         }
      }
   },
   "rescore" : {
      "window_size" : 50,
      "query" : {
         "rescore_query" : {
            "match_phrase" : {
               "message" : {
                  "query" : "the quick brown",
                  "slop" : 2
               }
            }
         },
         "query_weight" : 0.7,
         "rescore_query_weight" : 1.2
      }
   }
}
分数模式 描述

total

添加原始分数和rescore查询分数。默认值。

multiply

将原始分数乘以rescore查询分数。对function query重新调整有用。

avg

平均原始分数和rescore查询分数。

max

取最大原始分数和rescore查询分数。

min

取最小原始分数和rescore查询分数。

Scroll

search请求返回结果的单个“页面”时,scroll API可用于从单个搜索请求中检索大量结果(甚至所有结果),这与在传统数据库上使用游标的方式非常相似。

scroll不是针对实时用户请求,而是针对处理大量数据,例如为了将一个索引的内容重新索引到具有不同配置的新索引中。

POST /twitter/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}
POST /_search/scroll
{
    "scroll" : "1m",
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}
DELETE /_search/scroll
{
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}
DELETE /_search/scroll/_all
DELETE /_search/scroll/DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==,DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAABFmtSWWRRWUJrU2o2ZExpSGJCVmQxYUEAAAAAAAAAAxZrUllkUVlCa1NqNmRMaUhiQlZkMWFBAAAAAAAAAAIWa1JZZFFZQmtTajZkTGlIYkJWZDFhQQAAAAAAAAAFFmtSWWRRWUJrU2o2ZExpSGJCVmQxYUEAAAAAAAAABBZrUllkUVlCa1NqNmRMaUhiQlZkMWFB

Multi Search API

多搜索API允许在同一API中执行多个搜索请求。它的端点是_msearch

请求的格式类似于批量API格式,并使用换行符分隔的JSON(NDJSON)格式。结构如下(如果特定搜索最终重定向到另一个节点,则结构被特别优化以减少解析):

header \ n 
body \ n 
header \ n 
body \ n
GET twitter/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match_all" : {}}}
{"index" : "twitter2"}
{"query" : {"match_all" : {}}}

使用模板

GET _msearch/template
{"index" : "twitter"}
{ "source" : "{ \"query\": { \"match\": { \"message\" : \"{{keywords}}\" } } } }", "params": { "query_type": "match", "keywords": "some message" } }
{"index" : "twitter"}
{ "source" : "{ \"query\": { \"match_{{template}}\": {} } }", "params": { "template": "all" } }

© 著作权归作者所有

共有 人打赏支持
watermelon11
粉丝 0
博文 32
码字总数 69915
作品 0
深圳
私信 提问
springboot整合elasticsearch全文检索入门

只是简单的整合介绍 # 安装 下载elasticsearch与kibana https://www.elastic.co/start # 依赖 springBoot 2.0.5.RELEASE 起步依赖的elasticsearch的版本是 5.6.11 # 配置 可在application.y...

FutaoSmile丶
2018/10/23
0
0
Elasticsearch 1.7.0/1.6.1 发布,分布式搜索引擎

Elasticsearch 1.7.0 正式发布,基于 Lucene 4.10.4。同时还发布了 Elasticsearch 1.6.1 bug 修复版本。这两个版本都包括一个安全修复,建议所有用户升级最新版本! 下载: 最新稳定版: El...

淡漠悠然
2015/07/17
4.8K
10
Elastic Search 上市了,市值翻倍,这群人财务自由了!

国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分人可...

Java技术栈
2018/10/07
0
0
Elasticsearch插件一——-head插件安装详解(Elasticsearch教程08)|MVP讲堂

作者:阿里云MVP 铭毅 往期内容: 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招! Elasticsearch学习,请先看这一篇!(Elasticsearch教程01) Elasticsearch增、删、改、查操...

辰悠
2018/12/14
0
0
Elastic Search学习笔记1——安装elasticsearch2.4.6

Elastic Search 简介 1.基于Apache Lucene的开源搜索引擎 2.采用Java编写 RESTful API风格 3.较容易的横向扩展 应用场景 1.海量数据分析引擎 2.数据搜索引擎 3.数据仓库 官网 https://www.el...

晨猫
2018/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

React SSR样式及SEO的实践

前一篇主要记录了一下SSR配置以及结合Redux的使用。这里简单说一下React SSR中样式处理和更优雅的SEO SSR样式 在React客户端渲染,添加样式很容易。写一个css样式文件,在对应组件中引用。标...

前端小攻略
3分钟前
0
0
华为手机太猛!余承东吹的牛今天都实现了

华为是世界上少有的在2B和2C领域同时取得成功公司。如今,华为消费者业务的营收,已经在华为总营收中占据“半壁江山”。 12月27日,华为董事长郭平在新年致辞中披露,预计2018年华为预计实现...

linux-tao
14分钟前
1
0
JSP的Model2模式

整体可以看做是 Request > Control > ( Service > DAO > POJO ) > Response POJO是数据实体类,最佳实践是与数据库物理表相对应,方便用工具进行生成,也易于理解。由于直接与物理表相对应...

max佩恩
22分钟前
0
0
rabbitMQ的使用

RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种。 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间...

狼王黄师傅
27分钟前
0
0
面向对象继承

第1章 面向对象 1.1 知识回顾 1.Java中的数据类型 2.引用数据类型String中的方法 3.IO流_读写文件 1.2 面向对象概念回顾 什么叫面向对象编程?有人是这么理解的 也有人说不对,面向对象编程是你...

stars永恒
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部