Elasticsearch入门级查询基础

ElasticSearch基础查询,开整
首先创建索引并向其中添加数据

在这里我用的是直接生成索引,之所以可以自动生成索引是因为es会自动判定传入参数类型(但建议自己生成索引)
POST your_index/_doc
{
  "name":"嘿嘿嘿",
  "body":"男",
  "title":"这是一个标题",
  "user":123456
}
POST your_index/_doc
{
  "name":"哈哈哈",
  "body":"女",
  "title":"标题",
  "user":23456
}

获取全部数据

GET your_index/_search
{
  "query": {
    "bool": {
      
    }
  }
}

返回结果 hits是本次返回结果(其余返回字段下次介绍)
{
  "took" : 286,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "title" : "Relationships",
          "body" : "It's complicated...",
          "user" : 1,
          "name" : "123"
        }
      },
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "tZt8S3IB1MaVq7kAgCMj",
        "_score" : 1.0,
        "_source" : {
          "name" : "嘿嘿嘿",
          "body" : "男",
          "title" : "这是一个标题",
          "user" : 123456
        }
      },
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "Dpt9S3IB1MaVq7kALiUw",
        "_score" : 1.0,
        "_source" : {
          "name" : "哈哈哈",
          "body" : "女",
          "title" : "标题",
          "user" : 23456
        }
      }
    ]
  }
}

基本查询操作介绍
GET your_index/_search

{
  "query": {
    "bool": {
      "must": [            must代表必须满足里面的条件
        {}
      ],
      "must_not": [      must_not代表必须不满足里面的条件
        {}						
      ],
      "should": [      should代表应该满足,既满足里面任意一条件就可以展现出来
        {}
      ]
    }
  }
}

must使用(必须满足)

GET your_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {    #这个trem是es关键字,本次查询是查询boby的值是男的数据
            "body": {  #your_index中的字段
              "value": "男"
            }
          }
        }
      ]
    }
  }
}
结果返回:
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0925692,
    "hits" : [
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "tZt8S3IB1MaVq7kAgCMj",
        "_score" : 1.0925692,
        "_source" : {
          "name" : "嘿嘿嘿",
          "body" : "男",
          "title" : "这是一个标题",
          "user" : 123456
        }
      }
    ]
  }
}

must_not(必须不满足)

GET your_index/_search
{
  "query": {
    "bool": {
      "must_not":[    #必须不满足
          {
            "term": {
              "name": {
                "value": "嘿嘿嘿"
              }
            }
          }
        ]
    }
  }
}

should(应该满足,即如果should中有条件满足就展现满足条件的,如果不满足便为空)
should与must区别最大点在于must中的 条件必须全部同时满足才可以查询出数据,should可以只满足一个便查出,或者满足里面任意一个条件

GET your_index/_search
{
  "query": {
    "bool": {
    "should": [
      {
        "match": {
          "title": "这是一个标题"
        }
      }
    ]
    }
  }
}
结果返回
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 3.4513912,
    "hits" : [
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "tZt8S3IB1MaVq7kAgCMj",
        "_score" : 3.4513912,
        "_source" : {
          "name" : "嘿嘿嘿",
          "body" : "男",
          "title" : "这是一个标题",
          "user" : 123456
        }
      },
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "Dpt9S3IB1MaVq7kALiUw",
        "_score" : 1.0884296,
        "_source" : {
          "name" : "哈哈哈",
          "body" : "女",
          "title" : "标题",
          "user" : 23456
        }
      }
    ]
  }
}

大家对这个结果是不是很意外,因为我的数据里面只有一条数据里面包含"这是一个标题"的内容啊,为什么会展现出来两个呢,这是因为我们should里面用的是match关键字,这个关键字跟sql中的like有点相像,但这并不是说match这个就是模糊,它并不是模糊,它只是将我们的文本字段分词了,简单的说一下,比如说"这是一个标题"这段文本(text类型),当我们存入es之后它便会替我们分词,例如会分成"这是" “一个” “文本”,那当我们去查询的时候,我们传入的数据也会被分词,然后与查询字段进行匹配,如果满足匹配则返回结果

range范围查询(一般范围查询用于时间与数值类型的字段查询)

GET your_index/_search
{
  "query": {
    "bool": {
      "must": {
        "range": {   #范围查询关键字
          "user": {
            "gte": 123456, #gte代表大于等于
            "lte": 123457  #代表小于等于
          }
        }
      }
    }
  }
}
返回结果
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "your_index",
        "_type" : "_doc",
        "_id" : "tZt8S3IB1MaVq7kAgCMj",
        "_score" : 1.0,
        "_source" : {
          "name" : "嘿嘿嘿",
          "body" : "男",
          "title" : "这是一个标题",
          "user" : 123456
        }
      }
    ]
  }
}

filter(过滤查询)

GET your_index/_search
{
  "query": {
    "bool": {
      "filter": {      #filter可以接收单个条件,也可以是以数组形式接收多个条件
        "range": {
          "user": {
            "gte": 123456,
            "lte": 123457
          }
        }
      }
    }
  }

是否有同学会有疑问,这个filter与must与must_not有什么区别的,它们的却别在于filter代表只代表满足与不满足,es的查询并不如我们sql中的查询一样,只返回结果,es还会返回一个评分字段,也就是例如你全文检索时,会给你依据评分高低排序返回,凡是在filter中的条件统统不参与打评分,这也是说在我们不需要评分的时候我们可以把条件直接写进filter中,速度会快一点(毕竟不用参与打分)

exists(刨除字段为空的数据)

GET your_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {   #有些时候我们并不需要获取此字段为null的数据,便可以勇exitsts进行排除,但注意此关键字只能排除null不会排除""(空字符串)
          "field": "user"
        }
      }
    }

好了,以上就是本次分享的内容啦,如有疑问,可以评论提出哦!
以上查询是利用工具kibana 官网下载地址如下https://www.elastic.co/cn/downloads/kibana
(记得kibana与es的版本尽量一致,不一致容易导致一些意想不到的问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值