黑马程序员技术交流社区
标题:
【石家庄校区】全文搜索引擎 Elasticsearch 入门教程(3)
[打印本页]
作者:
htb52110
时间:
2018-3-15 13:38
标题:
【石家庄校区】全文搜索引擎 Elasticsearch 入门教程(3)
5.3 删除记录
删除记录就是发出 DELETE 请求。
$ curl
-
X DELETE
'localhost:9200/accounts/person/1'
这里先不要删除这条记录,后面还要用到。
5.4 更新记录
更新记录就是使用 PUT 请求,重新发送一次数据。
$ curl
-
X PUT
'localhost:9200/accounts/person/1'
-
d
'{ "user" : "张三", "title" : "工程师", "desc" : "数据库管理,软件开发"}'
{
"_index"
:
"accounts"
,
"_type"
:
"person"
,
"_id"
:
"1"
,
"_version"
:
2
,
"result"
:
"updated"
,
"_shards"
:{
"total"
:
2
,
"successful"
:
1
,
"failed"
:
0
},
"created"
:
false
}
上面代码中,我们将原始数据从"数据库管理"改成"数据库管理,软件开发"。 返回结果里面,有几个字段发生了变化。
"_version"
:
2
,
"result"
:
"updated"
,
"created"
:
false
可以看到,记录的 Id 没变,但是版本(version)从
1
变成
2
,操作类型(result)从
created
变成
updated
,
created
字段变成
false
,因为这次不是新建记录。
六、数据查询
6.1 返回所有记录
使用 GET 方法,直接请求
/Index/Type/_search
,就会返回所有记录。
$ curl
'localhost:9200/accounts/person/_search'
{
"took"
:
2
,
"timed_out"
:
false
,
"_shards"
:{
"total"
:
5
,
"successful"
:
5
,
"failed"
:
0
},
"hits"
:{
"total"
:
2
,
"max_score"
:
1.0
,
"hits"
:[
{
"_index"
:
"accounts"
,
"_type"
:
"person"
,
"_id"
:
"1"
,
"_score"
:
1.0
,
"_source"
:{
"user"
:
"张三"
,
"title"
:
"工程师"
,
"desc"
:
"数据库管理,软件开发"
}}]}}
上面代码中,返回结果的
took
字段表示该操作的耗时(单位为毫秒),
timed_out
字段表示是否超时,
hits
字段表示命中的记录,里面子字段的含义如下。
total
:返回记录数,本例是2条。
max_score
:最高的匹配程度,本例是
1.0
。
hits
:返回的记录组成的数组。
返回的记录中,每条记录都有一个
_score
字段,表示匹配的程序,默认是按照这个字段降序排列。
6.2 全文搜索
Elastic 的查询非常特别,使用自己的
查询语法
,要求 GET 请求带有数据体。
$ curl
'localhost:9200/accounts/person/_search'
-
d
'{ "query" : { "match" : { "desc" : "软件" }}}'
上面代码使用
Match 查询
,指定的匹配条件是
desc
字段里面包含"软件"这个词。返回结果如下。
{
"took"
:
3
,
"timed_out"
:
false
,
"_shards"
:{
"total"
:
5
,
"successful"
:
5
,
"failed"
:
0
},
"hits"
:{
"total"
:
1
,
"max_score"
:
0.28582606
,
"hits"
:[{
"_index"
:
"accounts"
,
"_type"
:
"person"
,
"_id"
:
"1"
,
"_score"
:
0.28582606
,
"_source"
:{
"user"
:
"张三"
,
"title"
:
"工程师"
,
"desc"
:
"数据库管理,软件开发"
}}]}}
Elastic 默认一次返回10条结果,可以通过
size
字段改变这个设置。
$ curl
'localhost:9200/accounts/person/_search'
-
d
'{ "query" : { "match" : { "desc" : "管理" }}, "size": 1}'
上面代码指定,每次只返回一条结果。
还可以通过
from
字段,指定位移。
$ curl
'localhost:9200/accounts/person/_search'
-
d
'{ "query" : { "match" : { "desc" : "管理" }}, "from": 1, "size": 1}'
上面代码指定,从位置1开始(默认是从位置0开始),只返回一条结果。
6.3 逻辑运算
如果有多个搜索关键字, Elastic 认为它们是
or
关系。
$ curl
'localhost:9200/accounts/person/_search'
-
d
'{ "query" : { "match" : { "desc" : "软件 系统" }}}'
上面代码搜索的是
软件 or 系统
。
如果要执行多个关键词的
and
搜索,必须使用
布尔查询
。
$ curl
'localhost:9200/accounts/person/_search'
-
d
'{ "query": { "bool": { "must": [ { "match": { "desc": "软件" } }, { "match": { "desc": "系统" } } ] } }}'
作者:
Yin灬Yan
时间:
2018-3-15 14:14
我来占层楼啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2