文档章节

ElastriSearch一些查询语句

tuoleisi77
 tuoleisi77
发布于 2017/06/19 15:12
字数 700
阅读 49
收藏 0

Elastic search(构建于Lucene之上)在一个容易管理的包中提供了高性能的全文搜索功能,支持开箱即用地集群化扩展。可以通过标准的REST API或从特定于编程语言的客户端库与Elasticsearch进行交互。

1、首先了解一下es的主要构成:

①索引(index)个人可以理解为关系型数据库的库

②类型(type)个人可以理解为关系型数据库的表

③文档(document)个人可以理解为关系型的唯一主键

2、es一些关键词

query下面可以加

②bool      布尔值

③must     相当于是关系型数据库的and

④filter      和bool的作用差不多,但是filter的查询效率更高

⑤term      指定的要查询的某个字段

agg 下面可以加

①term                   指定的字段

②agg                    相当于是关系型数据库的groupby

③cardinality           去重相当于是关系型的distinct

④sum max min 

等等

3、去重例子,在kibana执行如下

GET antifraud_enriched_prod-2017.06.17/_search
{
  "size": 0
  , "aggs": {
    "res_distinct": {
      "cardinality": {
        "field": "unstruct_event_com.cid"
        , "precision_threshold": 40000
      }
    }
  }
, "query": {
  "bool": {
    "must": [
      {
      "range": {
        "derived_tstamp": {
          "gte": "2017-06-17T10:49:46.685Z",
          "lte": "2017-06-17T10:51:46.685Z"
        }
      }
      }
    ]
  }
 }
}

执行如下:

field代表是存放在es的字段,这个字段我在mapping的时候没有分词,如果分词的话要在field后面加上.raw

右边total代表的是返回值,res_distinct代表的是根据cid去重后的结果

es的distinct本身是存在问题的,precision_threshold:指定的去重范围,如果查出来的数据超出了你指定的这个范围,查出来的数据就是有点不准确了,默认好像是100

4、指定字段查询

①一种查法:bool

GET  antifraud_enriched_prod-2017.06.18/_search
{
  "size": 0, 
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "event_name": {
              "value": "login"
            }
          }
        }
      ]
    }
  }
}

执行结果:

②另一种查法:filter

GET  antifraud_enriched_prod-2017.06.18/_search
{
  "size": 0, 
 "query": {
   "filtered": {
     "query": {
       "match_all": {}
     },
     "filter": {
       "term": {
         "event_name": "login"
       }
     }
   }
 }
}

执行结果

5、agg的例子

GET antifraud_enrich-2017.06a/_search
{
  "size": 0, 
  "aggs": {
    "mobile_city": {
      "terms": {
        "field": "unstruct_event_com_xhqb.mobileCity"
       , "size": 5
      }
      , "aggs": {
        "avg": {
          "sum": {
            "field": "unstruct_event_com_xhqb.loanAmount"
          }
        }
      }
    }
  }
  , "query": {
    "bool": {
      "must": [
        {
          "range": {
            "derived_tstamp": {
              "gte": "2017-06-01T10:25:23.947Z",
              "lte": "2017-06-01T10:28:23.947Z"
            }
          }
        }
      ]
    }
  }
}

执行结果:

其中结果:sum_other_doc_count 代表是groupby mobilcity字段的结果,key是sum_other_doc_count  的前提后groupby loanmount字段的结果

注意一般使用agg的话不要指定size=0,如果这样的话,数据会全部刷出kibana,数据量过大的话,kibana直接挂掉,曾经出现过这些问题

5、地理位置查询

GET antifraud_enrich-2017.06a/_search
{
  "size": 0, 
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "event_name": {
              "value": "app_apply"
            }
          }
        },{
          "range": {
            "collector_tstamp": {
              "gte": "2017-06-17T09:02:26.548",
              "lte": "2017-06-17T09:22:26.548"
            }
          }
        },{
            "geo_distance" : {
        "unstruct_event_com_xhqb_app_apply_1.geolocation" : [ 121.499754782832099, 31.267086143900748 ],
        "distance" : "1.0km"
      }
        }
      ]
    }
  }
}

查询结果

其中geolocation是地理位置字段, distance是1km的范围内,也就是说这个点的一公里范围里查出来有几个,这个字段比较特殊一定要是geo_point类型的,看例子

今天先写到这里

 

© 著作权归作者所有

tuoleisi77
粉丝 4
博文 28
码字总数 43810
作品 0
深圳
程序员
私信 提问
Hibernate查询技术之HQL语句

1、session中的get( )和load( )方法来查询对象。但其查询功能有限。 2、HQL查询方式 使用传统的JDBC API来查询数据,需要编写复杂的SQL语句,然后还要将查询结果以对象的形式进行封装,放到集...

大黄有故事
2016/10/30
0
0
php对数据库的增删改查操作

在我看来数据库是个既复杂又高深莫测的东西,但百分之八十左右的程序员都不需要去精通他,对于我们前端开发来说,只要会数据库的增删改查语句就差不多了。首先我们来说说sql的增删改查语句。...

马大哈tt
2017/11/24
0
0
网站mysql防止sql注入攻击 3种方法总结

mysql数据库一直以来都遭受到sql注入攻击的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的攻击都是与sql注入攻击有关,那么mysql数据库如何防...

网站安全
2018/10/11
74
0
hibernate flush 机制与调用 save 后不立即打印 sql 的问题

针对昨天同事遇到的hibernate的问题。算是hibernate最基本的东西。具了解,这个问题很多人遇到过,也很常见,却遇到了还经常会懵了。 为了加深印象,知其然,知其所以然。 之后单纯用原始的H...

唐海洋Sir
2014/02/28
1K
0
Rafy 框架 - 使用 SqlTree 查询

本文介绍如何使用 Rafy 框架中的 Sql Tree 查询: 除了开发者常用的 Linq 查询,Rafy 框架还提供了 Sql 语法树的方式来进行查询。 这种查询方式下,开发者不需要直接编写真正的 Sql 语句,而...

文艺小青年
2017/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部