ElasticSearch 搜索 API

  • 搜索 API

    该API用于在Elasticsearch中搜索内容。用户可以通过发送带有查询字符串作为参数的get请求进行搜索,或者可以在发布请求的消息正文中发布查询。主要是所有搜索API都是多索引,多类型的。
  • 多索引

    Elasticsearch允许我们搜索所有索引或某些特定索引中存在的文档。例如,如果我们需要搜索名称包含“central”的所有文档,则可以执行以下操作:
    
    GET /_all/_search?q=city:paprola 
    
    在运行上面的代码时,我们得到以下响应-
    
    {
       "took" : 33,
       "timed_out" : false,
       "_shards" : {
          "total" : 7,
          "successful" : 7,
          "skipped" : 0,
          "failed" : 0
       },
       "hits" : {
          "total" : {
             "value" : 1,
             "relation" : "eq"
          },
          "max_score" : 0.9808292,
          "hits" : [
             {
                "_index" : "schools",
                "_type" : "school",
                "_id" : "5",
                "_score" : 0.9808292,
                "_source" : {
                   "name" : "Central School",
                   "description" : "CBSE Affiliation",
                   "street" : "Nagan",
                   "city" : "paprola",
                   "state" : "HP",
                   "zip" : "176115",
                   "location" : [
                      31.8955385,
                      76.8380405
                   ],
                   "fees" : 2200,
                   "tags" : [
                      "Senior Secondary",
                      "beautiful campus"
                   ],
                   "rating" : "3.3"
                }
             }
          ]
       }
    }
    
  • URI 搜索

    使用统一资源标识符,可以在搜索操作中传递许多参数-
    参数 描述
    Q 此参数用于指定查询字符串。
    lenient 此参数用于指定查询字符串。仅通过将此参数设置为true即可忽略基于格式的错误。 默认情况下为false。
    fields 此参数用于指定查询字符串。
    sort 我们可以使用此参数来获得排序结果,该参数的可能值为fieldName,fieldName:asc / fieldname:desc
    timeout 我们可以使用此参数来限制搜索时间,并且响应仅包含指定时间内的匹配。 默认情况下,没有超时。
    terminate_after 对于每个分片,我们可以将响应限制为指定数量的文档,达到该数量后查询将提前终止。 默认情况下,没有terminate_after。
    from 从匹配的索引开始到返回。 预设为0。
    size 它表示要返回的文档数。 默认为10
  • 查询请求体

    我们还可以在请求正文中使用查询DSL指定查询,在前面的章节中已经给出了许多示例。这里给出一个这样的例子-
    
    POST /schools/_search
    {
       "query":{
          "query_string":{
             "query":"up"
          }
       }
    }
    
    在运行上面的代码时,我们得到以下响应-
    
    {
       "took" : 11,
       "timed_out" : false,
       "_shards" : {
          "total" : 1,
          "successful" : 1,
          "skipped" : 0,
          "failed" : 0
       },
       "hits" : {
          "total" : {
             "value" : 1,
             "relation" : "eq"
          },
          "max_score" : 0.47000363,
          "hits" : [
             {
                "_index" : "schools",
                "_type" : "school",
                "_id" : "4",
                "_score" : 0.47000363,
                "_source" : {
                   "name" : "City Best School",
                   "description" : "ICSE",
                   "street" : "West End",
                   "city" : "Meerut",
                   "state" : "UP",
                   "zip" : "250002",
                   "location" : [
                      28.9926174,
                      77.692485
                   ],
                   "fees" : 3500,
                   "tags" : [
                      "fully computerized"
                   ],
                   "rating" : "4.5"
                }
             }
          ]
       }
    }