Elasticsearch 数据搜索

Elasticsearch基于JSON文档或者基于URL的请求进行搜索。

Elasticsearch可以是Get请求也可以是Post请求,在搜索的过程可以搜索整个集群,也可以通过指定索引或类型的名称来限制范围。

Elasticsearch搜索的基本请求模块

query 搜索请求的重要组成部分,它配置了基于评分返回的最佳文档,包括了你不希望返回哪些文档。

size 代表了返回文档数量

from 和size一起使用 from用于分页操作。为了确定第二页的10项结果,Elasticsearch必须获取前20项的计算结果。结果集不断增加,获取某些数据分页的代开会增高

source 指定source字段如何返回,默认是返回所有的 _source字段,通过设置,将过滤返回的字段,如果索引的文档过大,而且无需结果中的全部内容就是用该功能。

sort 默认的排序基于文档的得分,如果不关心得分,或者期望许多文档部门的得分相同,添加额外的sort将帮助控制哪些文档被返回

在Elasticsearch的版本1之前,field用于过滤返回字段的组件。其行为就是返回可用的存储字段。如果没有存储字段可以使用。字段就从_source返回。如果在索引中没有显示的存储字段,最好使用_source模块
es导入外部json数据
curl -H “Content-Type:appliaction/json” -XPOST localhost:9200/index/mapping/_bulk —data-binary @account.json
data:
Elasticsearch基本搜索 - 图1

example1:分页
  1. {
  2. "from": 0, #从0开始
  3. "size": 10,#返回10条数据
  4. "_source": [
  5. "name",#返回name
  6. "age"#返回source
  7. ],
  8. "query": {
  9. "match_all": {}
  10. }
  11. }

example2 日期排序
{
  "from": 0,
  "size": 10,
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"  #age字段进行排序
      }
    }
  ]
}

example3 通配符
{
  "from": 0,
  "size": 10,
  "query": {
    "match_all": {}
  },
  "_source":{
    "includes": [
      "a*",#字段匹配a开头 *表示不做任何限制
      "cre*"字段匹配 cre开头
    ]
  }
}

回复的结构体
{
  "took": 1, #查询所使用的毫秒数
  "timed_out": false,#表明是否有分片超时,也就是说是否只返回了一部分结果
  "_shards": {#成功响应请求和未能成功响应请求的分片数量
    "total": 1, 总数量
    "successful": 1,成功响应的数量
    "skipped": 0, 
    "failed": 0#失败的数量
  },
  "hits": {  #回复中包含了命中的键,其值是命中文档的数组
    "total": 65, #该搜索请求所有匹配结果的数量
    "max_score": 1.0, 
    "hits": [#命中关键词元素中的命中文档数组
      {
        "_index": "test_index",#结果文档的索引
        "_type": "type",#结果文档的Elasticsearch类型
        "_id": "AXkXLTgUjAep6aBo4z53",#结果文档的ID
        "_score": 1.0,结果的相关性得分
        "_source": { #请求的_source字段 如果为过滤则默认所有
          "account_number": 32,
          "balance": 48086,
          "firstname": "Dillard",
          "lastname": "Mcpherson",
          "age": 34,
          "gender": "F",
          "address": "702 Quentin Street",
          "employer": "Quailcom",
          "email": "dillardmcpherson@quailcom.com",
          "city": "Veguita",
          "state": "IN"
        }
      }
    ]
  }
}

如果没有存储文档的_sources或者fields,那么将无法从文档中获取数值
ES5启用的一些查询
filtered 使用bool查询,也支持filter子句。
and must在bool查询中 使用子句。
or should在bool查询中 使用子句。
missing 使用否定的exists查询。(也missing从query_string查询中删除)
limit 改用terminate_after参数。
fquery 过滤器和查询合并后过时。
query 过滤器和查询合并后过时。
query_binary 没有文件,已被删除。
filter_binary 没有文件,已被删除