Elasticsearch

与Elasticsearch的交互

所有程序语言都可以通过RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的web客户端,事实上,如你所见,你甚至可以通过curl命令与Elasticsearch通信

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

curl [-i] -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'

VERB HTTP方法: GET , POST , PUT , HEAD , DELETE
PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
PORT Elasticsearch HTTP服务所在的端口,默认为9200
QUERY_STRING 一些可选的查询请求参数,例如 ?pretty 参数将使请求返回更加美观易读的JSON数据
BODY 一个JSON格式的请求主体(如果请求需要的话)
-i 表示显示http头
举例说明,为了计算急群众的文档数量,我们可以这样做:
curl -i -XGET 'http://localhost:9200/_count?pretty' -d 
'{
    "query":{
        "match_all":{}
    }    
}'

创建

put创建

创建索引index
newindex PUT
//创建一个索引并分配三个主分片和一个复制分片(每个主分片都有一个复制分片)
PUT /blogs
{
    "settings" : {
        "number_of_shards" : 3,
        "number_of_replicas" : 1
    }
}
创建类型type
newindex/newtype/_mapping PUT
创建文档  
newindex/newtype1/1 PUT

索引

关系型数据库与Elasticsearch对比

Relational DB -> Databases -> tables -> Rows     -> column
Elasticsearch -> Indices   -> Types  ->Documents -> Fields

Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多
个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

索引含义的区分

索引(名词) 如上文所述,一个索引(index)就像是传统关系数据库中的数据库,它是相关文档存储的地方,index的复数是indices 或indexes。
索引(动词) 「索引一个文档」表示把一个文档存储到索引(名词)里,以便它可以被检索或者查询。这很像SQL中的 INSERT 关键字,差别是,如果文档已经存在,新的文档将覆盖旧的文档。
倒排索引 传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索引(inverted index)的数据结构来达到相同目的。

简单插入

curl -XPUT '127.0.0.1:9200/megacorp/employee/1?pretty' -d '{"first_name":"tian","last_name":"shaoteng","age":25,"about":"I love to go rock climbing","interests":["sports","music"]}'
curl XPUT '127.0.0.1:9200/megacorp/employee/2?pretty' -d '{"first_name":"tian","last_name":"tianle","age":25,"about":"I love to go rock climbing","interests":["sports","music"]}'
curl XPUT '127.0.0.1:9200/megacorp/employee/3?pretty' -d '{"first_name":"tian","last_name":"ttl","age":25,"about":"I love to go rock climbing","interests":["sports","music"]}'

搜索

curl -XGET "localhost:9200/?pretty"

获取employee类型下所有数据
curl -XGET 'localhost:9200/megacorp/employee/_search'

搜索last_name为shaoteng的所有项 
[shaoteng@iz2ze9d7x8qidhuch2m2mjz ~]$ curl -XGET 'localhost:9200/megacorp/employee/_search?q=last_name:shaoteng'

搜索last_name为shaoteng的所有项 
curl -XGET 'localhost:9200/megacorp/employee/_search' -d '{"query":{"match":{"last_name":"shaoteng"}}}'


last_name为smith 年龄小于26
[shaoteng@iz2ze9d7x8qidhuch2m2mjz ~]$ curl -XGET 'localhost:9200/megacorp/employee/_search' -d '{"query":{"filtered":{"filter":{"range":{"age":{"lt":26}}},"query":{"match":{"last_name":"smith"}}}}}'

全文搜索

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

短语搜索

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

高亮搜索

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

返回内容

返回的内容大致可以如下讲解:

took:是查询花费的时间,毫秒单位

time_out:标识查询是否超时

_shards:描述了查询分片的信息,查询了多少个分片、成功的分片数量、失败的分片数量等

hits:搜索的结果,total是全部的满足的文档数目,hits是返回的实际数目(默认是10)

_score是文档的分数信息,与排名相关度有关,参考各大搜索引擎的搜索结果,就容易理解。 

prettty

在任意的查询字符串中增加 pretty 参数。会让Elasticsearch美化输出(pretty-print)JSON响应以
便更加容易阅读。 _source 字段不会被美化,它的样子与我们输入的一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值