在上一章介绍了文档的基本使用,有兴趣的可以参考一下
elasticSearch核心概念的介绍(三):文档的增删改查
在这一章我们会进行搜索的简单使用。
一、我们先将上述内容中的索引都删除
查看所有索引
curl -X GET "http://172.25.45.150:9200/_cat/indices?v"
挨个进行删除
curl -X DELETe "http://172.25.45.150:9200/nba"
二、新建一个索引,并且指定mapping
curl -X PUT "http://172.25.45.150:9200/nba" -H 'Content-Type:application/json' -d '
{
"mappings":{
"properties":{
"name":{
"type":"text"
},
"team_name":{
"type":"text"
},
"position":{
"type":"keyword"
},
"play_year":{
"type":"keyword"
},
"jerse_no":{
"type":"keyword"
}
}
}
}
'
三、新增document (数据)
doc1
curl -X PUT "http://172.25.45.150:9200/nba/_doc/1" -H 'Content-Type:application/json' -d '
{
"name":"哈登",
"team_name":"火箭",
"position":"得分后卫",
"play_year":"10",
"jerse_no":"13"
}
'
doc2
curl -X PUT "http://172.25.45.150:9200/nba/_doc/2" -H 'Content-Type:application/json' -d '
{
"name":"库里",
"team_name":"勇士",
"position":"控球后卫",
"play_year":"10",
"jerse_no":"30"
}
'
doc3
curl -X PUT "http://172.25.45.150:9200/nba/_doc/2" -H 'Content-Type:application/json' -d '
{
"name":"詹姆斯",
"team_name":"湖人",
"position":"小前锋",
"play_year":"15",
"jerse_no":"23"
}
'
四、查询
term(词条)查询和full text(全文)查询
词条查询:词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时,才匹配搜索。全文查询:ElasticSearch引擎会优先分析查询字符串,将其拆分称多个分词,只要已分析的字段中包含词条的任意一个,或全部包含,就匹配查询条件,返回该文档;如果不包含任意一个分词,表示没有任何文档匹配查询条件
单条term查询
请求
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"term":{
"jerse_no":"23"
}
}
}
'
多条term查询
请求
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"terms":{
"jerse_no":[
"23","13"
]
}
}
}
'
响应
{
"took": 1, //消耗的时间
"timed_out": false, //是否超时
"_shards": { //分片信息
"total": 1, //这里是单台机器,这里是1
"successful": 1, //成功1
"skipped": 0,
"failed": 0
},
"hits": { //搜索结果命中
"total": {
"value": 2, //查询出来总数
"relation": "eq" //=
},
"max_score": 1.0, //最大分数,排序使用,下面数据通过倒序去排列
"hits": [
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"name": "哈登",
"team_name": "火箭",
"position": "得分后卫",
"play_year": "10",
"jerse_no": "13"
}
},
{
"_index": "nba",
"_type": "_doc",
"_id": "3",
"_score": 1.0,
"_source": {
"name": "詹姆斯",
"team_name": "湖人",
"position": "小前锋",
"play_year": "15",
"jerse_no": "23"
}
}
]
}
}
full text(match)全文查询
match_all查询
match_all 会查询所有的数据
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"match_all":{}
},
"from":0,
"size":100
}
'
match查询
需要注意的是使用match进行查询的话,type类型要是text可分词的全文搜索类型。
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"match":{
"name":"库小里宝宝"
}
},
"from":0,
"size":100
}
'
multi_match 多个查询
先修改一条数据(将id=2的新增title字段)
curl -X POST "http://172.25.45.150:9200/nba/_update/2" -H 'Content-Type:application/json' -d '
{
{
"doc":{
"name":"库里",
"team_name":"勇士",
"position":"控球后卫",
"play_year":"10",
"jerse_no":"30",
"title":"the best shooter"
}
}
'
使用multi_match 多字段查询
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"multi_match":{
"query":"shooter",
"fields":["title","name"]
}
},
"from":0,
"size":100
}
'
响应
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "nba",
"_type": "_doc",
"_id": "2",
"_score": 0.2876821,
"_source": {
"name": "库里",
"team_name": "勇士",
"position": "控球后卫",
"play_year": "10",
"jerse_no": "30",
"title": "the best shooter"
}
}
]
}
}
match_phrase 查询
类似于词条查询,精确查询
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"match_phrase":{
"position":"得分后卫"
}
},
"from":0,
"size":100
}
'
match_phrase _prefix
前缀查询类似于 mysql中 like查询
curl -X POST "http://172.25.45.150:9200/nba/_search" -H 'Content-Type:application/json' -d '
{
"query":{
"match_phrase_prefix":{
"title":"the"
}
}
}
'



