ElasticSearch 搜索使用

ElasticSearch为Java用户提供了两种内置客户端:

1.节点客户端:以无数据节点身份加入集群,(无数据节点的含义就是不存储任何数据)但他知道数据在集群中的具体位置,并能直接转发请求到对应节点上。

2.传输客户端:不加入集群,只是简单转发请求给集群中的节点。

两个客户端都通过9300端口与集群交互。集群中的节点之间也通过9300端口通信。

一个节点是一个单一的服务器,是集群的一部分,存储数据,并且参与集群的索引和搜索功能。通过配置特定的集群名称来加入特定的集群。

一个集群是由一个或多个节点(服务器)组成的。 一个集群中只有一个节点是有效的并且是非常好的。

向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
  • VERB HTTP方法:GET, POST, PUT, HEAD,DELETE

  • PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)

  • HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost

  • PORT Elasticsearch HTTP服务所在的端口,默认为9200

  • PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm

  • QUERY_STRING一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据

  • BODY 一个JSON格式的请求主体(如果请求需要的话)

1.索引

Elasticsearch是面向文档(document oriented)的,它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。

在elasticSearch中存储数据的行为叫做索引(index)(数据库),每个文档归属于类型(type)(表)。每一个类型包含多个文档(document)(记录、行),每个文档包含多个字段(field)(字段)。

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices(对应数据库) -> Types(对于数据表) -> Documents(对应表的记录) -> Fields(字段)

在elasticSearch中“索引”的含义:

  • 类似于传统关系数据库的数据库名称

  • 类似于数据库中的insert关键字。

  • 倒排索引,类似于数据库中的特定列的索引。

eg:创建员工目录:为每个员工的文档建立索引user,每个文档的类型为employee,索引存储在ElasticSearch集群中 。

path:PUT /megacorp/employee/1

{
"first_name" : "李",
"last_name" : "尔",
"age" : 25,
"about" : "我喜欢爬山、游泳",
"interests": [ "运动", "音乐" ]
}

path包含三部分信息:

名字

说明

megacorp

索引名

employee

类型名

1

这个员工的ID

在目录中加入更多员工信息。

2.检索文档

  • 索引过程已经存储了一些数据,体验elasticSearch检索单个员工的信息。 执行HTTP GET请求并指出文档的“地址”——索引、类型和ID既可。

GET /megacorp/employee/1

  • 在结尾使用关键字_search来取代原来的文档ID。响应内容的hits数组中包含了我们所有的三个文档。默认情况下搜索会返回前10个结果

GET /megacorp/employee/_search

  • 查询字符串查询(参数在url中)

GET /megacorp/employee/_search?q=last_name:尔

  • 使用DSL语句查询(参数使用json格式传递)

GET /megacorp/employee/_search

{
    "query" : {
        "match" : {
        "last_name" : "尔"
         }
     }
}

复杂的搜索之添加搜索过滤器

eg:得到年龄大于22岁的员工(大于:gt,小于:lt)

GET /megacorp/employee/_search

{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 22 }
            }
      },
    "query" : {
        "match" : {
            "last_name" : "尔"
                }
            }
        }
    }
}

全文搜索。按照文档与查询条件的匹配程度排序并返回结果集。传统数据库中,只有匹配不匹配,没有匹配查询。

GET /megacorp/employee/_search

{
    "query" : {
        "match" : {
            "about" : "爬"
        }
    }
}

短语搜索。只要将match查询变更为match_phrase查询即可。 查询同时包含"游"和"泳"(并且是相邻的)的员工记录

GET /megacorp/employee/_search

{
       "query" : {
            "match_phrase" : {
                "about" : "游泳"
        }
     }
}

聚合。类似于数据库的group by(要先开启text类型)。

开启text类型

POST /megacorp/employee/

{
  "properties": {
    "interest": {
      "type":"text",
      "fielddata":true
    }
  }
}

找到所有职员中最大的共同点(兴趣爱好)是什么

GET /megacorp/employee/_search

{

    "aggs": {

        "all_interests": {

            "terms": { "field": "interests" }

        }

    }

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值