现在让我们从一些简单的搜索开始。

搜索参数传递有2种方法:

  • URI发送搜索参数
  • 请求体(request body)发送搜索参数

搜索相关的REST API可以从_search端点访问。下面的例子返回bank索引中的所有文档:

API

GET /bank/_search?q=*&sort=account_number:asc&pretty

CURL

curl -X GET "localhost:9200/bank/_search?q=*&sort=account_number:asc&pretty"

本例采用uri方式传递搜索参数:

  • q=* 搜索索引中的所有文档
  • sort=account_number:asc 搜索结果以字段account_number升序排列
  • pretty 返回结果以漂亮的JSON格式打印

响应:


{
"took" : 55,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1000,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "bank",
"_type" : "_doc",
"_id" : "0",
"_score" : null,
"_source" : {
"account_number" : 0,
"balance" : 16623,
"firstname" : "Bradshaw",
"lastname" : "Mckenzie",
"age" : 29,
"gender" : "F",
"address" : "244 Columbus Place",
"employer" : "Euron",
"email" : "bradshawmckenzie@euron.com",
"city" : "Hobucken",
"state" : "CO"
},
"sort" : [
0
]
},
{
"_index" : "bank",
"_type" : "_doc",
"_id" : "1",
"_score" : null,
"_source" : {
"account_number" : 1,
"balance" : 39225,
"firstname" : "Amber",
"lastname" : "Duke",
"age" : 32,
"gender" : "M",
"address" : "880 Holmes Lane",
"employer" : "Pyrami",
"email" : "amberduke@pyrami.com",
"city" : "Brogan",
"state" : "IL"
},
"sort" : [
1
]
}, ... ]
}
}

看一下响应中的重要字段:

  • took – 搜索时间(毫秒)
  • timed_out – 搜索是否超时
  • _shards – 搜索了多少分片,搜索分片的成功/失败计数
  • hits – 搜索结果
  • hits.total – 搜索命中总数信息
    • hits.total.value - 命中总数
    • hits.total.relation - 取值eq(等于)/gte(大于等于),表示hits.total.value与实际的搜索命中数量的关系。
  • hits.hits – 实际的搜索结果数组(默认为前10个文档)
  • hits.sort - 结果排序键(如果按分数排序,则忽略)
  • hits._scoremax_score - 分数是衡量文档与搜索条件匹配程度的一个指标。分数越高,文档越相关,分数越低,文档越不相关。并不总是需要生成分数,需不需要Elasticsearch会自动判断,以避免计算无用的分数。

如果搜索结果很多,超过一定数量后,通常就不再统计,只是笼统地表示为:搜索结果超过XXXX个。hits.total的准确性由请求参数track_total_hits控制,当track_total_hitstrue时,搜索时将精确地跟踪总命中数(“relationship”:“eq”)。track_total_hits默认值为10,000,意味着总命中数可以精确地跟踪到10000个文档,如果超过10000,会表示为超过10000个结果,如下所示:

    "total" : {
"value" : 10000,
"relation" : "gte"
},

通过将track_total_hits显式地设置为true,可以强制进行准确计数。详细信息,请参阅request body文档。

同样的例子,使用请求体(request body)发送搜索参数:

API

GET /bank/_search
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}

CURL

curl -X GET "localhost:9200/bank/_search" -H 'Content-Type: application/json' -d'
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}
'

可以看到,没有在URI中传递q=*,而是向_search API传递json风格的请求体,下一节中会详细讨论。

注意,一旦获得了搜索结果,Elasticsearch就会结束这次搜索,不会再维护任何服务端资源,也没有结果游标,这与其他很多平台,如SQL,不一样。

Elasticsearch 搜索API的更多相关文章

  1. Elasticsearch 搜索数据

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  2. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  3. ElasticSearch查询 第一篇:搜索API

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  4. elasticsearch系列四:搜索详解(搜索API、Query DSL)

    一.搜索API 1. 搜索API 端点地址 从索引tweet里面搜索字段user为kimchy的记录 GET /twitter/_search?q=user:kimchy 从索引tweet,user里 ...

  5. Elasticsearch核心技术(五):搜索API和搜索运行机制

    本文将从数据存储和搜索的角度简单分析Elasticsearch的搜索运行机制,主要涉及搜索API.搜索机制.存在问题和解决方案. 4.1 Search API Search API允许用户执行一个搜索 ...

  6. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  7. 搜索引擎(Elasticsearch搜索详解)

    学完本课题,你应达成如下目标: 掌握ES搜索API的规则.用法. 掌握各种查询用法 搜索API 搜索API 端点地址 GET /twitter/_search?q=user:kimchy GET /t ...

  8. ElasticSearch搜索介绍四

    ElasticSearch搜索 最基础的搜索: curl -XGET http://localhost:9200/_search 返回的结果为: { "took": 2, &quo ...

  9. 搜索引擎Elasticsearch REST API学习

    Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...

随机推荐

  1. I Hate it-HDU1754 点修改+区间最大值

    题意: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢, 现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然, ...

  2. 【剑指Offer面试编程题】题目1371:最小的K个数--九度OJ

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行: 第一行为2个整数n,k(1< ...

  3. 远程服务器使用tensorboard

    1 .由于服务器上tensorboard使用的端口是6006,因此,连接ssh时,将服务器的6006端口重定向到自己机器上的16006端口: ssh -L 16006:127.0.0.1:6006 u ...

  4. Spark教程——(1)安装Spark

    Cloudera Manager介绍     Cloudera Manager(简称CM)是Cloudera公司开发的一款大数据集群安装部署利器,这款利器具有集群自动化安装.中心化管理.集群监控.报警 ...

  5. window.onload 方法脚本

    //首先 创建一个函数 function windowOload(func){ var onLoad = window.onload; //如果window.onload没有绑定任何函数 则绑定该函数 ...

  6. Linux系统使用ss命令查看端口状态

    Linux系统使用ss命令查看端口状态 目录 1.可用工具 2.ss帮助 2.1 选项分类说明 2.2 过滤选项family 2.3 过滤选项state 2.4 状态之间的关系 3.ss的使用 3.1 ...

  7. pycharm连接mysql数据库的时区问题.

    登录到mysql的控制台, 执行: set global time_zone='+8:00'; 这设置的是全局时区,重启后失效. 自MySQL 8.0 GA版本开始支持将参数写入并且持久化: set ...

  8. IdentityServer4专题之一:OAuth2.0介绍

    1.OAuth 2.0授权方式介绍: OAuth 2.0 的标准是 RFC 6749 文件.该文件先解释了 OAuth 是什么: OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有 ...

  9. 南邮CG-CTF Web记录

    MYSQL(利用精度,传参为小数) robots.txt中的代码: <?php if($_GET[id]) { mysql_connect(SAE_MYSQL_HOST_M . ':' . SA ...

  10. 二十四 Redis消息订阅&事务&持久化

    Redis数据类型: Redis控制5种数据类型:String,list,hash,set,sorted-set 添加数据,删除数据,获取数据,查看有多少个元素,判断元素是否存在 key通用操作 JR ...