Node.js教程之Node.js和Elasticsearch构建搜索引擎(2)
沉沙 2019-03-11 来源 : 阅读 604 评论 0

摘要:本篇文章探讨了Node.js教程之Node.js和Elasticsearch构建搜索引擎(2),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了Node.js教程之Node.js和Elasticsearch构建搜索引擎(2),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

Node.js教程之Node.js和Elasticsearch构建搜索引擎(2)

<

这篇文章主要记录Elasticsearch检索的一些知识。下面所有的搜索例子都是使用上一篇文章中的示例测试的。
 
1、Elasticsearch搜索数据有两种方式。
一种方式是通过REST请求URI,发送搜索参数;
另一种是通过REST请求体,发送搜索参数。而请求体允许你包含更容易表达和可阅读的JSON格式。这个是DSL查询(Query DSL).
2、Elasticsearch搜索基本语法。
[GET|POST] //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
例如://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 //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 //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 查询语言过于复杂,关键字非常多,需要再用到时查询文档。    

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程