Elasticsearch【快速入门】 (3)

不过对于安装了 Kibana 的我们,可以直接在 Kibana 的控制台输出以下语句,也是同样的效果:

GET /_count?pretty { "query": { "match_all": {} } } 文档管理(CRUD)

如果对于 RESTful 不太熟悉的童鞋请右转:【传送门】

增加:

POST /db/user/1 { "username": "wmyskxz1", "password": "123456", "age": "22" } POST /db/user/2 { "username": "wmyskxz2", "password": "123456", "age": "22" }

这一段代码稍微解释一下,这其实就往索引为 db 类型为 user 的数据库中插入一条 id 为 1 的一条数据,这条数据其实就相当于一个拥有 username/password/age 三个属性的一个实体,就是 JSON 数据

执行命令后,Elasticsearch 返回如下数据:

# POST /db/user/1 { "_index": "db", "_type": "user", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 2, "_primary_term": 1 } # POST /db/user/2 { "_index": "db", "_type": "user", "_id": "2", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1 }

version 是版本号的意思,当我们执行操作会自动加 1

删除:

DELETE /db/user/1

Elasticsearch 返回数据如下:

{ "_index": "db", "_type": "user", "_id": "1", "_version": 2, "result": "deleted", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1 }

这里就可以看到 version 变成了 2

修改:

PUT /db/user/2 { "username": "wmyskxz3", "password": "123456", "age": "22" }

Elasticsearch 返回数据如下:

{ "_index": "db", "_type": "user", "_id": "2", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 2, "_primary_term": 1 }

查询:

GET /db/user/2

返回数据如下:

{ "_index": "db", "_type": "user", "_id": "2", "_version": 2, "found": true, "_source": { "username": "wmyskxz3", "password": "123456", "age": "22" } } 搜索

上面我们已经演示了基本的文档 CRUD 功能,然而 Elasticsearch 的核心功能是搜索,所以在学习之前,为更好的演示这个功能,我们先往 Elasticsearch 中插入一些数据:

PUT /movies/movie/1 { "title": "The Godfather", "director": "Francis Ford Coppola", "year": 1972, "genres": [ "Crime", "Drama" ] } PUT /movies/movie/2 { "title": "Lawrence of Arabia", "director": "David Lean", "year": 1962, "genres": [ "Adventure", "Biography", "Drama" ] } PUT /movies/movie/3 { "title": "To Kill a Mockingbird", "director": "Robert Mulligan", "year": 1962, "genres": [ "Crime", "Drama", "Mystery" ] } PUT /movies/movie/4 { "title": "Apocalypse Now", "director": "Francis Ford Coppola", "year": 1979, "genres": [ "Drama", "War" ] } PUT /movies/movie/5 { "title": "Kill Bill: Vol. 1", "director": "Quentin Tarantino", "year": 2003, "genres": [ "Action", "Crime", "Thriller" ] } PUT /movies/movie/6 { "title": "The Assassination of Jesse James by the Coward Robert Ford", "director": "Andrew Dominik", "year": 2007, "genres": [ "Biography", "Crime", "Drama" ] }

**_search端点**

现在已经把一些电影信息放入了索引,可以通过搜索看看是否可找到它们。 为了使用 ElasticSearch 进行搜索,我们使用 _search 端点,可选择使用索引和类型。也就是说,按照以下模式向URL发出请求:<index>/<type>/_search。其中,index 和 type 都是可选的。

换句话说,为了搜索电影,可以对以下任一URL进行POST请求:

:9200/_search - 搜索所有索引和所有类型。

:9200/movies/_search - 在电影索引中搜索所有类型

:9200/movies/movie/_search - 在电影索引中显式搜索电影类型的文档。

搜索请求正文和ElasticSearch查询DSL

如果只是发送一个请求到上面的URL,我们会得到所有的电影信息。为了创建更有用的搜索请求,还需要向请求正文中提供查询。 请求正文是一个JSON对象,除了其它属性以外,它还要包含一个名称为 “query” 的属性,这就可使用ElasticSearch的查询DSL。

{ "query": { //Query DSL here } }

你可能想知道查询DSL是什么。它是ElasticSearch自己基于JSON的域特定语言,可以在其中表达查询和过滤器。你可以把它简单同SQL对应起来,就相当于是条件语句吧。

基本自由文本搜索:

查询DSL具有一长列不同类型的查询可以使用。 对于“普通”自由文本搜索,最有可能想使用一个名称为“查询字符串查询”。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygxdp.html