1、Elasticsearch搜索数据有两种方式。

一种方式是通过REST请求URI,发送搜索参数;

另一种是通过REST请求体,发送搜索参数。而请求体允许你包含更容易表达和可阅读的JSON格式。这个是DSL查询(Query DSL).

2、Elasticsearch搜索基本语法。

[GET|POST] http://domain.com/your_index/type1,type2/_search{?search_type=count|scan|...}

  注意,随着ES版本变化,搜索语法也有小调整。本文以5.3为准。

3、搜索例子。

1)查询单个文档

格式: get /_index/_type/_id
例如:http://localhost:9200/library/article/57508457556e30622882ba58
说明:查询索引是library下面的,类型是article的,_id是57508457556e30622882ba58的这个文档。
{
  "_index":"library", //索引
  "_type":"article", //类型
  "_id":"57508457556e30622882ba58", //文档id(这个id在导入时不指定会自动生成)
  "_version":1, //版本号,每次改动会+1
  "found":true, //true表示document存在
  "_source":{ //文档全部内容
    "id":"57508457556e30622882ba58",
    "title":"Adipisicing pariatur quis magna do et.",
    "journal":"quis nostrud",
    "volume":61,
    "number":11,
    "pages":"42-59"
    ...
  }
}

2)以query_string参数查询

// 查询标题title中含有pariatur的数据
get http://localhost:9200/library/article/_search?q=title:pariatur
{
"took": 8, //查询花费的时间,单位毫秒
"timed_out": false, //查询是否超时
"_shards": { //描述分片的信息
"total": 5, //查询了多少个分片
"successful": 5, //成功的分片数量
"failed": 0   //失败的分片数量
},
"hits": {  //搜索的结果
"total": 145, //全部的满足条件的文档数目
"max_score": 2.8908465, //文档最大得分
"hits": [
{
"_index": "library", //索引
"_type": "article", //类型
"_id": "57508457556e30622882ba58", //文档id
"_score": 2.8908465, //文档的分数信息,与排名相关度有关,参考各大搜索引擎的搜索结果
"_source": { //文档原数据
"id": "57508457556e30622882ba58",
"title": "Adipisicing pariatur quis magna do et.",
"journal": "quis nostrud",
"volume": 61,
"number": 11,

3)使用DSL查询,提交JSON格式参数。

//实现上面例子一样的查询结果,可以用工具ElasticSearch Toolbox测试效果
请求:get http://localhost:9200/library/article/_search
参数:
{
  "query": {
    "match": {
      "title": "pariatur"
    }
  },
  "from": 0, //表示从第几行开始(默认0)
  "size": 10 //表示查询多少条文档(默认10)
}
//注意:如果搜索size大于10000,需要设置index.max_result_window参数,size的大小不能超过index.max_result_window这个参数的设置,默认为10,000。

4)多条件查询 bool:must、filter、should

官方例子是:Query-DSL-bool-query

{
"query": {
"bool" : { //成为query的过滤器,还有其它的,如:and,or,not,limit
"must" : { //must,filter,should为过滤条件,如果有多个子条件,使用[]
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1, //用于现在should的子条件匹配个数。
"boost" : 1.0 //表示此过滤器的权重,默认1.0
}
}
}

由于 Query-DSL 查询语言过于复杂,关键字非常多,需要再用到时查询文档。

官网帮助文档地址 :https://www.elastic.co/guide/en/elasticsearch/reference/5.3/index.html

学习用Node.js和Elasticsearch构建搜索引擎(2):一些检索命令的更多相关文章

  1. 学习用Node.js和Elasticsearch构建搜索引擎(6):实际项目中常用命令使用记录

    1.检测集群是否健康. curl -XGET 'localhost:9200/_cat/health?v' #后面加一个v表示让输出内容表格显示表头 绿色表示一切正常,黄色表示所有的数据可用但是部分副 ...

  2. 学习用Node.js和Elasticsearch构建搜索引擎(1):了解并运行Elasticsearch

    1.学习Elasticsearch概述. 了解Elasticsearch是什么?能做什么?可以查一下elasticsearch.lucene等的相关介绍,另外也可以查查资料比较一下其它的搜索引擎sph ...

  3. 学习用Node.js和Elasticsearch构建搜索引擎(4): 构建Elasticsearch搜索引擎

    一.目标 使用node搭建一个知识库检索系统,要求词条平均检索速度必须在1s以内. 二.思路. 本人思路如下图. 橙色部分为我们要开发的内容, ES服务搭建(暂时用单节点测试,集群搭建以后再说), 三 ...

  4. 学习用Node.js和Elasticsearch构建搜索引擎(7):零停机时间更新索引配置或迁移索引

    上一篇说到如果一个索引的mapping设置过了,想要修改type或analyzer,通常的做法是新建一个索引,重新设置mapping,再把数据同步过来. 那么如何实现零停机时间更新索引配置或迁移索引? ...

  5. 学习用Node.js和Elasticsearch构建搜索引擎(5):mac本机部署canal

    1.背景介绍 最近做的一个项目需要快速检索数据,经过商讨后采用了ElasticSearch作为快速检索数据引擎,但是数据如何同步到ES中是个问题,我们最开始计划了定时任务.mysql trigger等 ...

  6. 学习用Node.js和Elasticsearch构建搜索引擎(3):使用curl命令操作elasticsearch

    使用Elasticsearch不免要提到curl工具,curl是利用URL语法在命令行方式下工作的开源文件传输工具.官网地址:https://curl.haxx.se/ 因为elasticsearch ...

  7. 如何用 Node.js 和 Elasticsearch 构建搜索引擎

    Elasticsearch 是一款开源的搜索引擎,由于其高性能和分布式系统架构而备受关注.本文将讨论其关键特性,并手把手教你如何用它创建 Node.js 搜索引擎. Elasticsearch 概述 ...

  8. 学习用node.js建立一个简单的web服务器

    一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...

  9. 利用Node.js调用Elasticsearch

    1. 下载elasticsearch库 npm install elasticsearch --save 2.在脚本里导入模块,如下所示 const elasticsearch = require(' ...

随机推荐

  1. NoSQL与MongoDB介绍

    写在前面 本文是由一次演讲整理出来的,文中大部分资料来源于网络,感谢Wikipedia,Google和MongoDB官网.文中使用的MongoDB版本为1.2.4. What is NoSQL NoS ...

  2. js 实现动态时间

    <span id="timebox"></span>                   //承载时间的span $(function () { var o ...

  3. Greenplum hostname和address不一致导致配置文件无法加载

    最近又遇到了几个坑,逐一记录分析下. 1.主机名hostname和address不一致 在又一次部署压测环境交由测试组进行压测时,同事修改了pg_hba.conf文件重新加载配置文件时报错.(找不到l ...

  4. Linux CFS调度器之task_tick_fair处理周期性调度器--Linux进程的管理与调度(二十九)

    1. CFS如何处理周期性调度器 周期性调度器的工作由scheduler_tick函数完成(定义在kernel/sched/core.c, line 2910), 在scheduler_tick中周期 ...

  5. c/c++ new delete初探

    new delete初探 1,new有2个作用 开辟内存空间. 调用构造函数. 2,delete也有2个作用 释放内存空间 调用析构函数. 如果用new开辟一个类的对象的数组,这个类里必须有默认(没有 ...

  6. 我在 Mac 上都用什么

    我在 Mac 上都用什么 Homebrew Homebrew 是统一管理 macOS 中应用的最佳方法之一,而且大量优秀的应用都可以在 Homebrew 中找到. 就不做过多介绍了, 有兴趣可以看相关 ...

  7. Java虚拟机(Java Virtual Machine)

    JVM(Java Virtual Machine),Java虚机机,是JDK最底层的东西.只要能将源代码编译成字节码(.class)文件,就可以由JVM在不同平台上解释成机器指令来执行.所以,Java ...

  8. 《软工实践》第零次作业 - 一些QA

    <软工实践>第零次作业 - 一些QA Q&A (1)回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的? 你认为过去两年中接触到的课程是否符合你对计算机 ...

  9. 微信小程序跳转微信小程序新增配置项目 navigateToMiniProgramAppIdList

    每个小程序可跳转的其他小程序数量限制为不超过 10 个 从 2.4.0 版本以及指定日期(具体待定)开始,开发者提交新版小程序代码时,如使用了跳转其他小程序功能,则需要在代码配置中声明将要跳转的小程序 ...

  10. C#基础知识之Partial class

    C# 2.0 可以将类.结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可. 例如:下面的PartialTest类 class PartialTest { string ...