这这里主要是存在term与match的查询介绍。
一:term
词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时,才匹配搜索。
1.准备工作
新建索引,然后新建mappings
PUT /nba/
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"team_name": {
"type": "text"
},
"position": {
"type": "text"
},
"play_year": {
"type": "long"
},
"jerse_no": {
"type": "keyword"
}
}
}
}
添加三条数据:
PUT /nba/_doc/1
{
"name": "哈登",
"team_name": "⽕箭",
"position": "得分后卫",
"play_year": 10,
"jerse_no": "13"
}
PUT /nba/_doc/2
{
"name": "库⾥",
"team_name": "勇⼠",
"position": "控球后卫",
"play_year": 10,
"jerse_no": "30"
}
PUT /nba/_doc/3
{
"name": "詹姆斯",
"team_name": "湖⼈",
"position": "⼩前锋",
"play_year": 15,
"jerse_no": "23"
}
2.单条查询
GET /nba/_search
{
"query": {
"term":{
"jerse_no": "13"
}
}
}
效果:
{
"took" : 961,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808292,
"hits" : [
{
"_index" : "nba",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.9808292,
"_source" : {
"name" : "哈登",
"team_name" : "⽕箭",
"position" : "得分后卫",
"play_year" : 10,
"jerse_no" : "13"
}
}
]
}
}
3.多条查询
GET /nba/_search
{
"query": {
"terms": {
"jerse_no":[
"23","13"
]
}
}
}
效果:
{
"took" : 24,
"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【会存在分词】
ElasticSearch引擎会先分析查询字符串,将其拆分成多个分词,只要已分析的字 段中包含词条的任意⼀个,或全部包含,就匹配查询条件,返回该⽂档;如果不包含任意⼀ 个分词,表示没有任何⽂档匹配查询条件
1.match_al
全部查询:
GET /nba/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2
}
結果:
{
"took" : 0,
"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"
}
}
]
}
}
2.match
GET /nba/_search
{
"query": {
"match": {
"position": "得分后卫"
}
}
}
效果:
{
"took" : 60,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"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"
}
},
{
"_index" : "nba",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.90630186,
"_source" : {
"name" : "库⾥",
"team_name" : "勇⼠",
"position" : "控球后卫",
"play_year" : 10,
"jerse_no" : "30"
}
}
]
}
}
2.multi_match
修改mapping,添加一个字段:
POST /nba/_mapping
{
"properties" : {
"jerse_no" : {
"type" : "keyword"
},
"name" : {
"type" : "text"
},
"play_year" : {
"type" : "long"
},
"position" : {
"type" : "text"
},
"team_name" : {
"type" : "text"
},
"title":{
"type":"text"
}
}
}
新增记录:
PUT /nba/_doc/4
{
"jerse_no": "13",
"title": "火箭"
}
查询:
GET /nba/_search
{
"query": {
"multi_match": {
"query": "火箭",
"fields": ["team_name","title"]
}
}
}
效果:
{
"took" : 257,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.9808292,
"hits" : [
{
"_index" : "nba",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.9808292,
"_source" : {
"name" : "哈登",
"team_name" : "⽕箭",
"position" : "得分后卫",
"play_year" : 10,
"jerse_no" : "13"
}
},
{
"_index" : "nba",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.5753642,
"_source" : {
"jerse_no" : "13",
"title" : "火箭"
}
}
]
}
}
3.match_phase
进行对比。
GET /nba/_search
{
"query":{
"match_phrase": {
"position": "得"
}
}
}
GET /nba/_search
{
"query":{
"match_phrase": {
"position": "后卫"
}
}
}
效果:
# GET /nba/_search
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.94566005,
"hits" : [
{
"_index" : "nba",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.94566005,
"_source" : {
"name" : "哈登",
"team_name" : "⽕箭",
"position" : "得分后卫",
"play_year" : 10,
"jerse_no" : "13"
}
}
]
}
}
# GET /nba/_search
{
"took" : 0,
"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"
}
}
]
}
}
4.match_phase_prefix
适合单词进行匹配.
先修改文档:
POST /nba/_update/4
{
"doc":{
"jerse_no" : "13",
"title" : "best the shooter"
}
}
GET /nba/_doc/4
查询:
GET /nba/_search
{
"query": {
"match_phrase_prefix": {
"title": "th"
}
}
}
效果:
{
"took" : 1,
"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" : "4",
"_score" : 0.2876821,
"_source" : {
"jerse_no" : "13",
"title" : "best the shooter"
}
}
]
}
}
来源:oschina
链接:https://my.oschina.net/u/4340589/blog/3222605