Elastic Search 主要靠 Restful api 来对索引进行操做。主要分为两类,一类是索引的管理类的 api ,包括索引的建立、修改、删除、查询等,文档的建立、修改、删除等。还有一类是查询类,包括各类条件的文档的检索。html
这里咱们准备了好了一个场景。在这里咱们假定有一批做者,每一个做者都有标识、姓名、性别、年龄,描述着几个字段。每一个做者都会写一些列的文章,文章包括文章标识、标题、做者标识、内容、发表时间字段。咱们须要经过姓名、年龄、描述中的关键词来查询做者,须要根据发表时间、标题关键词、内容关键词以及做者来查询文章。node
这里分析一下。咱们须要建两个索引,一个是做者索引,还有一个是文章索引。其中做者索引的描述字段和文章索引的标题、内容字段须要作分词。linux
如下全部操做都是在前文《Elastic Search 安装和配置》的基础上进行的。大部分的 rest api 的请求都是在 postman 这个工具里完成。git
要按照关键词进行搜素,须要对对应的字段的值进行分词。针对中文,须要指定特殊的分词插件。这里咱们用了 IK 分词插件。这个插件有针对 Elastic Search 的安装包。注意必定要安装对应版本的。前面安装的 Elastic Search 的版本时 6.1.1 因此用下面的命令来安装:程序员
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.1.1/elasticsearch-analysis-ik-6.1.1.zip
复制代码
安装好了后,重启 Elastic Search,执行命令github
curl http://10.110.2.53:9200/_cat/plugins
master analysis-ik 6.1.1
复制代码
能够看到,IK 6.1.1的分词器已经安装好了docker
一个典型的索引建立的 rest api 接口的调用以下所示:json
curl -X PUT -H 'Content-Type:application/json' \
http://10.110.2.53:9200/author -d ' { "settings": { "index": { "number_of_shards": 6, "number_of_replicas": 0 } }, "mappings": { "person": { "properties": { "name": { "type": "text" }, "sex": { "type": "text" }, "age": { "type": "integer" }, "des": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" } } } } } '
复制代码
这里包含两个部分,第一个部分是索引设置(Setting),第二个部分是索引映射(Mapping)api
索引设置经过 settings.index 用来设置索引的相关配置。例子中设置索引的分片数量(number_of_shards)为 6 个,副本的数量(number_of_replicas)为 0 。由于咱们的实验环境是单节点的,因此不建立副本。不然由于没法把副本建立到第二个 node 上,会致使索引的健康状态为 yellow。bash
索引映射( mapping)就是用来在建立索引的时候,指定索引中字段的配置。配置的内容包括
建立索引的时候,明确经过 mappings 参数来设置每一个字段的映射就叫作明确索引映射。如上述的例子。
除了在建立索引的时候指定索引字段的映射关系,还有一个简单的建立索引的方式是不指定索引字段的映射,Elastic Search 将会为索引采用动态映射(dynamic mapping)方式在第一次索引这个字段的时候自动推进自动的存储类型、存储格式等。
例如咱们能够用一下方法建立一个做者(author)的索引
curl -X PUT http://10.110.2.53:9200/author
复制代码
这个里面咱们没有为这个索引设置任何映射信息。当咱们用下面的信息为这个索引建立第一个文档的时候,会自动的将 name、sex、des 映射为 text 类型,而将 age 映射为 long 。
{
"name":"杨高超",
"age":24,
"sex":"男",
"des":"IT软件工程师,擅长Java和软件架构"
}
复制代码
除了建立索引,还有修改索引、查询索引、删除索引等操做 api。更多、更详细的索引操做 api 的用法能够参考官网文档
经过下面的命令查询 author 索引的详细信息以下:
curl http://10.110.2.53:9200/author?pretty
{
"author" : {
"aliases" : { },
"mappings" : {
"doc" : {
"properties" : {
"age" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"des" : {
"type" : "text",
"analyzer" : "ik_max_word"
},
"name" : {
"type" : "text"
},
"age" : {
"type" : "integer"
},
"sex" : {
"type" : "text"
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1515160270198",
"number_of_shards" : "6",
"number_of_replicas" : "0",
"uuid" : "v1E0_mfAR5qRIroOV31HOA",
"version" : {
"created" : "6010199"
},
"provided_name" : "author"
}
}
}
}
复制代码
下面的命令将一个做者文档索引到做者索引中
curl -H 'Content-Type:application/json' http://10.110.2.53:9200/author -d ' { "name": "李高超", "age": 23, "sex": "女", "des": "IT软件经理,擅长Java和开发管理" } '
复制代码
最后索引到做者 (author) 索引和文章(article)索引的数据列表以下
curl -X GET 'http://10.110.2.53:9200/article/_search?q=docker搭建gitlab&pretty'
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 6,
"successful" : 6,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.3862944,
"hits" : [
{
"_index" : "article",
"_type" : "doc",
"_id" : "rKOjxmABQGn3FeQBeqAg",
"_score" : 1.3862944,
"_source" : {
"title" : "经过 docker 搭建自用的 gitlab 服务",
"author" : "qaOXxmABQGn3FeQBMqCA",
"created" : "2018-01-01 15:11:11",
"context" : "git 是当下如日中天的版本管理系统。如今若是不是工做在 git 版本管理系统之下,几乎都很差意思和人打招呼了。有不少现成的互联网的 git 服务提供给你们使用,例如号称程序员社交网络的 GitHub,还有低调好用的 bitbucket 。这些给我的使用或者公司用来作开源使用都没有什么问题。但若是在部门内推广使用就会涉及到代码不能公开或者额外的费用的问题。本人原来在部门内采用的是手工在 linux 服务器上来管理代码仓库。权限无法设置,也很是不方便。因此也一直很苦恼。"
}
}
]
}
}
复制代码
curl -X POST -H 'Content-Type:application/json' http://10.110.2.53:9200/author/_search?pretty -d ' { "took" : 5, "timed_out" : false, "_shards" : { "total" : 6, "successful" : 6, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.2876821, "hits" : [ { "_index" : "author", "_type" : "doc", "_id" : "qaOXxmABQGn3FeQBMqCA", "_score" : 0.2876821, "_source" : { "name" : "杨高超", "age" : "24", "sex" : "男", "des" : "IT软件工程师,擅长Java和软件架构" } }, { "_index" : "author", "_type" : "doc", "_id" : "qqOXxmABQGn3FeQBiKCD", "_score" : 0.2876821, "_source" : { "name" : "李高超", "age" : "23", "sex" : "女", "des" : "IT软件经理,擅长Java和开发管理" } } ] } } 复制代码
curl -X POST -H 'Content-Type:application/json' http://10.110.2.53:9200/author/_search?pretty -d ' { "query": { "bool": { "must": [ { "match": { "des": "经理" } }, { "match": { "name": "高超" } } ] } } } '
复制代码
这个查询获得 name 包含“高超”, des 包含“经理”的做者
更多、更详细的查询用法能够参考官网文档。你们能够基于咱们的样例和文档说明执行更多的查询。
对于 Elastic Search 的 Api 的详细用法能够多参考官网的说明。实际上咱们在程序中使用。都是使用高级 Api 来操做。后续咱们在用别的文章来讲明。