zoukankan      html  css  js  c++  java
  • ElasticSearch入门系列(七)搜索

    一、在之前,我们已经学会了如何使用elasticsearch作为一个简单的NoSql风格的分布式文件存储器--我们可以将一个JSON文档扔给Elasticsearch.也可以根据ID检索他们。但Elasticsearch真正强大之处在于找出有意义的信息--从大数据到全面的信息。

    使用结构化的JSON文档,Elasticsearch不止会存储文档也会索引文档内容来使之可以被搜索。

    每个文档里的字段都会被索引并被查询。而且不仅如此,在简单查询时,Elasticsearch可以使用所有的索引,以非常快的速度返回结果。

    A search can be :

    在类似于gender或者age这样的字段上使用结构化查询,join_date这样的字段上使用排序,就像SQL的结构化查询一样。

    全文检索,可以使用所有字段类匹配关键字,然后按照关联性排序返回结果。

    很多搜索是开箱即用的:

    映射Mapping    :数据在每个字段中的解释说明

    分析Analysis     :全文是如何处理的可以被搜索的

    领域特定语言查询(Query DSL) :Elasticsearch使用的灵活的,强大的查询语言、

    二、空搜索

    最基本的搜索API表单是空搜索,他没有指定任何的查询条件,只返回集群索引中的所有文档。

    GET /_search

    {
       "hits" : {
          "total" :       14,
          "hits" : [
            {
              "_index":   "us",
              "_type":    "tweet",
              "_id":      "7",
              "_score":   1,
              "_source": {
                 "date":    "2014-09-17",
                 "name":    "John Smith",
                 "tweet":   "The Query DSL is really powerful and flexible",
                 "user_id": 2
              }
           },
            ... 9 RESULTS REMOVED ...
          ],
          "max_score" :   1
       },
       "took" :           4,
       "_shards" : {
          "failed" :      0,
          "successful" :  10,
          "total" :       10
       },
       "timed_out" :      false
    }

    hits:

    响应中最重要的部分是hits,他包含了total字段来表示匹配到的文档总数,hits数组还包含了匹配到的前10条数据。

    hits数组中的每个结构都包含_index _type  _id,被加入到_source字段中意味着在搜索结果中我们可以直接使用全部文档,这不像其他搜索引擎只返回文档ID需要单独去获取文档。

    每个节点都有一个_source字段,这是相关性得分,他衡量了文档与查询的匹配程度,默认的返回的结果中关联性最大的文档排在首位。

    took:

    took告诉我们整个搜索请求af花费的毫秒数

    shards:

    _shards节点告诉我们参与查询的分骗术有多少是成功的,有多少是失败的。

    timeout:

    查询超时与否

    GET /_search?timeout=10ms

    二、多索引和多类别

    通过限制搜索的不同索引和类型,我们可以在集群中跨所有的文档搜索,Elasticsearch转发搜索请求到集群中平行的主分片或每个分片的复制分片上。

    /_search    在所有索引的所有类型中搜索

    /gb/_search   在索引gb的所有类型中搜索

    /gb,us/_search  :在索引gb和us的所有类型中搜索

    /g*,u*/_search :在以g和u开头的索引的所有类型中搜索

    /gb/user/_search :在索引gb的类型user中搜索

    /gb,us/user,tweet/_search :在索引gb和us的类型为user和tweet中搜索

    /_all/user,tweet/_Search :在所有索引的user和tweet中搜索 search types user and tweet in all indices

    三、分页

    和SQL使用LIMIT关键字返回只有一页的结果一样,Elasticsearch接受from和size参数:

    size:结果数默认10

    from:跳过开始的结果数默认0

    每页显示5个结果,页码从1到3

    GET /_search?size=5

    GET /_search?size=5&from=5

    GET /_search?size=5&from=10

    四、查询字符串

    search API有两种表单,一种是简易版查询字符串将所有参数通过查询字符串定义,另一种版本是使用JSON完整的表示请求体。

    查询所有类型为tweet并在tweet字段中包含elasticsearch字符的文档

    GET /_all/tweet/_search?q=tweet:elasticsearch

    查询name字段中包含John和tweet中包含mary的结果

    +name:john +tweet:mary

  • 相关阅读:
    【二分图】HEOI2012 朋友圈
    【转载】动态规划—各种 DP 优化
    【默哀】京阿尼纵火案一周年
    【暑假集训】HZOI2019 Luogu P1006 传纸条 二三四维解法
    【暑假集训】HZOI2019 水站 多种解法
    最小二乘法求线性回归方程
    51Nod 最大M子段和系列 V1 V2 V3
    【博弈论】51Nod 1534 棋子游戏
    【最短路】CF 938D Buy a Ticket
    51nod1524 最大子段和V2
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/5757351.html
Copyright © 2011-2022 走看看