zoukankan      html  css  js  c++  java
  • ES elasticsearch利用url查询

    准备好数据
    为了说明问题的方便,我们首先在 Kibana 中使用如下的 bulk 指令来创建我们的 twitter 索引。

    POST _bulk
    { "index" : { "_index" : "twitter", "_id": 1} }
    {"user":"张三","message":"今儿天气不错啊,出去转转去","uid":2,"age":20,"city":"北京","province":"北京","country":"中国","address":"中国北京市海淀区","location":{"lat":"39.970718","lon":"116.325747"}, "DOB":"1980-12-01"}
    { "index" : { "_index" : "twitter", "_id": 2 }}
    {"user":"老刘","message":"出发,下一站云南!","uid":3,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区台基厂三条3号","location":{"lat":"39.904313","lon":"116.412754"}, "DOB":"1981-12-01"}
    { "index" : { "_index" : "twitter", "_id": 3} }
    {"user":"李四","message":"happy birthday!","uid":4,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区","location":{"lat":"39.893801","lon":"116.408986"}, "DOB":"1982-12-01"}
    { "index" : { "_index" : "twitter", "_id": 4} }
    {"user":"老贾","message":"123,gogogo","uid":5,"age":35,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区建国门","location":{"lat":"39.718256","lon":"116.367910"}, "DOB":"1983-12-01"}
    { "index" : { "_index" : "twitter", "_id": 5} }
    {"user":"老王","message":"Happy BirthDay My Friend!","uid":6,"age":50,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区国贸","location":{"lat":"39.918256","lon":"116.467910"}, "DOB":"1984-12-01"}
    { "index" : { "_index" : "twitter", "_id": 6} }
    {"user":"老吴","message":"好友来了都今天我生日,好友来了,什么 birthday happy 就成!","uid":7,"age":90,"city":"上海","province":"上海","country":"中国","address":"中国上海市闵行区","location":{"lat":"31.175927","lon":"121.383328"}, "DOB":"1985-12-01"}
    这里总共有6条数据。

    下面,我们来进行一些查询的动作。

    搜索数据
    首先,我们做一个简单的搜索,我们可以在浏览器中打入如下的命令:

    GET twitter/_search?q=user:张三


    我们通过 “q=user:张三” 查询到我们所需要的文档。在有的时候这是一种非常快的查询方式。我们也可以在浏览器中直接打入一个这样的 URI:

    http://localhost:9200/_search?q=user:%E5%BC%A0%E4%B8%89&pretty


    或者在命令行中:

    下面,我们将使用 Kibana 来展示使用 URI 搜索的一些最基本的特点。

    URI 查询使用语法根据运算符(例如 OR,AND 或 NOT)解析和拆分提供的查询字符串

    我们想使用 sort 来对数据进行排序:

    GET twitter/_search?q=city:"北京"&sort=DOB:desc


    上面显示了所有来自北京的用户,并按照出生年月降序排列。

    假如我们只想在 _source 里显示年龄,DOB 及城市信息,我们可以这么做:

    GET twitter/_search?q=city:"北京"&sort=DOB:desc&_source=city,age,DOB


    从上面的显示可以看出来,我们只看到有三个字段显示出来。加入我们想分页,每个页只有2个文档,那么我们可以这么做:

    GET twitter/_search?q=city:"北京"&sort=DOB:desc&_source=city,age,DOB&size=2


    从上面的显示上我们可以看出来,只有两个文档被显示出来尽管总共有5个文档满足条件。

    假如这个时候,我们想对 city 为 “上海” 和 “北京” 的所有用户都来统计一下,那么我们可以使用如下的语句:

    GET twitter/_search?q=city:("北京" or "上海") &sort=DOB:desc&_source=city,age,DOB&size=2


    显然这个时候,我们得到了6条数据。上海和北京的所有用户都被搜索出来了。

    假如我们想查询来自“北京”并且名字叫做 “张三” 的文档,那么我们可以这么查询:

    GET twitter/_search?q=city:"北京" AND user:"张三


    从上面可以看出来就只有一条数据。

    假如我们想得到来除了上海以外地区的所有的用户,那么我们可以使用如下的方法来得到:

    GET twitter/_search?q=NOT city:"上海"


    我们看到了5个数据。

    我们也可以对某些想进行加权,以使得它们能够排在更前面,比如:

    上面的查询是寻找年龄是20岁的,或者是来自上海的人。从搜索的结果来看,我们可以看到上海的老吴是排在前面。如果我们想对年龄为20岁的人需要有更多的关注,那么我们可以对它们的搜索结果进行加权,这样会使得它们的分数更高。我们可以采用如下的方法来做:

    GET twitter/_search?q=(age:20^5 OR city:"上海")
    在上面,我们显然对age为20的这个选项进行了加权。那么搜索后的结果为:

    我们可以看到现在 age 为20岁的张三排到了搜索结果的前面。

    假如我们不指定任何的 field 的话,那么这个搜索将对所有的 field 都进行:

    GET twitter/_search?q=张三


    当然我们也可以进行 fuzzy搜索:

    上面标明有一个 edit 错误也可以被搜索出来。对于中文的检索,这个依赖于分词器。在我们的实验中没有使用具体的分词器。这个和实际的使用可能会有区别。

    我们也可以对一下范围进行搜索:

    GET twitter/_search?q=age:[20 TO 30]


    上面搜索的结果是从20岁到30岁的所有的结果,并且都包含在里面。我们如果不想包含30岁的话,那么可以写成这样的格式:

    我们使用 [20 TO 30}, 如果我们想搜索在30岁一下的所有文档,那么我们可以使用如下的搜索方式:

    在这里,我们使用[* TO 30},这里不包含30。

    好了今天就讲到这里。这里的所有的语法也适用于在 Kibana 中的 Search Bar。如果我们熟练地掌握了这些,也可以很方便地让我们熟练地操作 Kibana 中搜索。
    原文链接:Elastic 中国社区官方博客

    螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。 --章怀柔
  • 相关阅读:
    [Ansible]copy 模块
    [Ansible]script模块
    [Ansible]command shell模块
    [Ansible]Systemd 模块
    [Ansible]YUM 模块
    [Ansible]yum_repository模块 添加 删除yum源
    [Ceph]osd 无法启动 start request repeated too quickly for ceph-osd@1.service
    [Ceph]pool 删除 Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
    题解 烷基计数 加强版 加强版
    Polya 定理 学习笔记
  • 原文地址:https://www.cnblogs.com/lovezhr/p/15076904.html
Copyright © 2011-2022 走看看