学习用Node.js和Elasticsearch构建搜索引擎(2):一些检索命令
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为准。
- 全基于rest式http调用。 其中GET方法支持在body传参数。
- _search 是关键字,以此结束表示搜索行为,可以同时搜索多个index与type。
- search_type值现在有query_then_fetch和 dfs_query_then_fetch两中选择,默认是query_then_fetch;资料信息请参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-type.html
- body部分必需是json;同时支持 URL 中使用query_string传参;
- 搜索请求会以query_string参数优先,且在 URL 中的参数有可能使用简写,如q==query。
- 可以同时索引多个index或type,逗号隔开,或直接使用通配符。
- 更丰富官方索引文档在此 https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html
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):一些检索命令的更多相关文章
- 学习用Node.js和Elasticsearch构建搜索引擎(6):实际项目中常用命令使用记录
1.检测集群是否健康. curl -XGET 'localhost:9200/_cat/health?v' #后面加一个v表示让输出内容表格显示表头 绿色表示一切正常,黄色表示所有的数据可用但是部分副 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(1):了解并运行Elasticsearch
1.学习Elasticsearch概述. 了解Elasticsearch是什么?能做什么?可以查一下elasticsearch.lucene等的相关介绍,另外也可以查查资料比较一下其它的搜索引擎sph ...
- 学习用Node.js和Elasticsearch构建搜索引擎(4): 构建Elasticsearch搜索引擎
一.目标 使用node搭建一个知识库检索系统,要求词条平均检索速度必须在1s以内. 二.思路. 本人思路如下图. 橙色部分为我们要开发的内容, ES服务搭建(暂时用单节点测试,集群搭建以后再说), 三 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(7):零停机时间更新索引配置或迁移索引
上一篇说到如果一个索引的mapping设置过了,想要修改type或analyzer,通常的做法是新建一个索引,重新设置mapping,再把数据同步过来. 那么如何实现零停机时间更新索引配置或迁移索引? ...
- 学习用Node.js和Elasticsearch构建搜索引擎(5):mac本机部署canal
1.背景介绍 最近做的一个项目需要快速检索数据,经过商讨后采用了ElasticSearch作为快速检索数据引擎,但是数据如何同步到ES中是个问题,我们最开始计划了定时任务.mysql trigger等 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(3):使用curl命令操作elasticsearch
使用Elasticsearch不免要提到curl工具,curl是利用URL语法在命令行方式下工作的开源文件传输工具.官网地址:https://curl.haxx.se/ 因为elasticsearch ...
- 如何用 Node.js 和 Elasticsearch 构建搜索引擎
Elasticsearch 是一款开源的搜索引擎,由于其高性能和分布式系统架构而备受关注.本文将讨论其关键特性,并手把手教你如何用它创建 Node.js 搜索引擎. Elasticsearch 概述 ...
- 学习用node.js建立一个简单的web服务器
一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...
- 利用Node.js调用Elasticsearch
1. 下载elasticsearch库 npm install elasticsearch --save 2.在脚本里导入模块,如下所示 const elasticsearch = require(' ...
随机推荐
- 用cmd命令行编译JAVA程序时出现“找不到或无法加载主类”
今天复习Java基础知识时,使用cmd命令窗口进行编译Java文件发现了如下问题: 网上有很多的解决方法,和问题出现的讨论,以下方法是解决我出现这个问题方式. 解决方式: 重点是圈住的部分. 下面是我 ...
- 暂别SQL Server,转战MySQL和Redis
机缘巧合下找到一个愿意提供学习MySQL和Redis机会的岗位,于是要暂别SQL Server了. 后续一段时间会陆续总结三年来SQL Server相关的工作经验,当做是暂别前的总结.
- C#虚函数virtual详解
在面向对象编程中,有两种截然不同的继承方式:实现继承和接口继承.在实现继承时候,在Java中,所有函数默认都是virtual的,而在C#中所有函数并不默认为virtual的,但可以在基类中通过声明关键 ...
- mysql中的升序和降序以及一个字段升序和一个字段降序
mySql中,升序为asc,降序为desc.例如: 升序:select * from 表名 order by 表中的字段 asc(mysql中默认是升序排列,可不写) 降序:select ...
- innerHTML的使用
inerHTML是html标签的属性,成对出现的标签大多数都有这个属性,用来设置或获取位于对象起始和结束标签 内的HTML.(获取HTML当前标签的起始和结束里面的内容)不包括标签本身. ...
- 【转】win2008 中iis7设置404页面但返回状态200的问题解决办法
今天根据SEO反馈,某个站点中设置的404页面返回的http状态为200.通过站长工具进行查询,发现返回的状态确实为200. 通过彻查问题,发现这个网站的服务器环境为windows2008 服务器为i ...
- grep正则表达式搜索
grep -n -e "INT32 *AdaptorPrmOp" --include "*.c" -r ./ 搜索函数的定义 中间有n个空格
- swiper.js + jquery.magnific-popup.js 实现奇葩的轮播需要
奇葩的轮播图 说轮播图很简单的,一定是没有遇到厉害的产品. 先说需求: 首先,一个mask会有三张图片,点击左右按钮会左右滑动一张图片的宽度. 点击展示的三张图片的任意一张,弹出遮罩,显示该图片的放大 ...
- 【HNOI2018】排列
[HNOI2018]排列 神仙贪心题. 题目说这么大堆东西就是想告诉你这是个森林,选了\(v\)的父亲后才能选\(v\). 我们设\(w_v\)为\(v\)所在联通块权值和,\(size_v\)表示\ ...
- 这些Linux命令,让你的工作事半功倍!
这些Linux命令,让你的工作事半功倍! 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较 ...