搜索的简单使用
准备工作
- 删掉nba索引
- DELETE localhost:9200/nba
- 新建一个索引,并且指定mapping新增document
- PUT localhost:9200/nba
-
{ "mappings":{ "properties":{ "name":{ "type":"text" }, "team_name":{ "type":"text" }, "position":{ "type":"text" }, "play_year":{ "type":"long" }, "jerse_no":{ "type":"keyword" } } } }
- PUT localhost:9200/nba/_doc/1
-
{ "name":"哈登", "team_name":"火箭", "position":"得分后卫", "play_year":10, "jerse_no":"13" }
- PUT localhost:9200/nba/_doc/2
-
{ "name":"库里", "team_name":"勇士", "position":"控球后卫", "play_year":10, "jerse_no":"30" }
- PUT localhost:9200/nba/_doc/3
-
{ "name":"詹姆斯", "team_name":"湖人", "position":"小前锋", "play_year":15, "jerse_no":"23" }
term(词条)查询和full text(全文)查询
- 词条查询:词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时,才匹配搜索。
- 全文查询:ElasticSearch引擎会先分析查询字符串,将其拆分成多个分词,只要已分析的字段中包含词条的任意一个,或全部包含,就匹配查询条件,返回该文档;如果不包含任意一个分词,表示没有任何文档匹配查询条件
单条term查询
POST localhost:9200/nba/_search
{
"query":{
"term":{
"jerse_no":"23"
}
}
}
多条term查询
POST localhost:9200/nba/_search
参数:
{
"query":{
"terms":{
"jerse_no":[
"23",
"13" ] } } } 返回值: { "took": 18, "timed_out": false, "_shards": { "total": 1, "successful": 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" } } ] } }
match_all
POST localhost:9200/nba/_search
参数:
{
"query":{
"match_all":{
}
},
"from":0,
"size":10
}
返回值:
{
"took": 4, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "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": "2", "_score": 1.0, "_source": { "name": "库里", "team_name": "勇士", "position": "控球后卫", "play_year": 10, "jerse_no": "30" } }, { "_index": "nba", "_type": "_doc", "_id": "3", "_score": 1.0, "_source": { "name": "詹姆斯", "team_name": "湖人", "position": "小前锋", "play_year": 15, "jerse_no": "23" } } ] } }
match
POST localhost:9200/nba/_search
参数:
{
"query":{
"match":{
"position":"后卫"
}
}
}
返回值:
{
"took": 55,
"timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 2, "relation": "eq" }, "max_score": 0.90630186, "hits": [ { "_index": "nba", "_type": "_doc", "_id": "1", "_score": 0.90630186, "_source": { "name": "哈登", "team_name": "火箭", "position": "得分后卫", "play_year": 10, "jerse_no": "13" } }, { "_index": "nba", "_type": "_doc", "_id": "2", "_score": 0.90630186, "_source": { "name": "库里", "team_name": "勇士", "position": "控球后卫", "play_year": 10, "jerse_no": "30" } } ] } }
multi_match
POST localhost:9200/nba/_update/2
参数:
{
"doc":{
"name":"库里",
"team_name":"勇士",
"position":"控球后卫",
"play_year":10, "jerse_no":"30", "title":"the best shooter" } } POST localhost:9200/nba/_search 参数: { "query":{ "multi_match":{ "query":"shooter", "fields":[ "title", "name" ] } } } 参数: { "query":{ "multi_match":{ "query":"shooter", "fields":[ "*title", "name" ] } } }
match_phrase
post localhost:9200/nba/_search
参数:
{
"query":{
"match_phrase":{
"position":"得分后卫"
}
}
}
返回值:
{
"took": 12,
"timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 2.797622, "hits": [ { "_index": "nba", "_type": "_doc", "_id": "1", "_score": 2.797622, "_source": { "name": "哈登", "team_name": "⽕火箭", "position": "得分后卫", "play_year": 10, "jerse_no": "13" } } ] } }
match_phrase_prefix
POST localhost:9200/nba/_update/3
参数:
{
"doc":{
"name":"詹姆斯",
"team_name":"湖人",
"position":"小前锋",
"play_year":15, "jerse_no":"23", "title":"the best small forward" } } POST localhost:9200/nba/_search 参数: { "query":{ "match_phrase_prefix":{ "title":"the best s" } } } 返回值: { "took": 4, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 2, "relation": "eq" }, "max_score": 1.8596163, "hits": [ { "_index": "nba", "_type": "_doc", "_id": "2", "_score": 1.8596163, "_source": { "name": "库里", "team_name": "勇士", "position": "控球后卫", "play_year": 10, "jerse_no": "30", "title": "the best shooter" } }, { "_index": "nba", "_type": "_doc", "_id": "3", "_score": 1.6542599, "_source": { "name": "詹姆斯", "team_name": "湖人", "position": "小前锋", "play_year": 15, "jerse_no": "23", "title": "the best small forward" } } ] } }