ElasticSearch(7.2.2)-搜索的简单使⽤

  • 2019 年 10 月 30 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102799417

准备⼯作
  • 删掉nba索引
    • DELETE localhost:9200/nba
  • 新建⼀个索引,并且指定mapping
    • PUT localhost:9200/nba
{  	"mappings": {  		"properties": {  			"name": {  				"type": "text"  			},  			"team_name": {  				"type": "text"  			},  			"position": {  				"type": "text"  			},  			"play_year": {  				"type": "long"  			},  			"jerse_no": {  				"type": "keyword"  			}  		}  	}  }
新增document
  • 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": 21,  	"timed_out": false,  	"_shards": {  		"total": 1,  		"successful": 1,  		"skipped": 0,  		"failed": 0  	},  	"hits": {  		"total": {  			"value": 2,  			"relation": "eq"  		},  		"max_score": 1,  		"hits": [{  				"_index": "nba",  				"_type": "_doc",  				"_id": "1",  				"_score": 1,  				"_source": {  					"name": "哈登",  					"team_name": "⽕箭",  					"position": "得分后卫",  					"play_year": 10,  					"jerse_no": "13"  				}  			},  			{  				"_index": "nba",  				"_type": "_doc",  				"_id": "3",  				"_score": 1,  				"_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": 9,  	"timed_out": false,  	"_shards": {  		"total": 1,  		"successful": 1,  		"skipped": 0,  		"failed": 0  	},  	"hits": {  		"total": {  			"value": 3,  			"relation": "eq"  		},  		"max_score": 1,  		"hits": [{  				"_index": "nba",  				"_type": "_doc",  				"_id": "1",  				"_score": 1,  				"_source": {  					"name": "哈登",  					"team_name": "⽕箭",  					"position": "得分后卫",  					"play_year": 10,  					"jerse_no": "13"  				}  			},  			{  				"_index": "nba",  				"_type": "_doc",  				"_id": "2",  				"_score": 1,  				"_source": {  					"name": "库⾥",  					"team_name": "勇⼠",  					"position": "控球后卫",  					"play_year": 10,  					"jerse_no": "30"  				}  			},  			{  				"_index": "nba",  				"_type": "_doc",  				"_id": "3",  				"_score": 1,  				"_source": {  					"name": "詹姆斯",  					"team_name": "湖⼈",  					"position": "⼩前锋",  					"play_year": 15,  					"jerse_no": "23"  				}  			}  		]  	}  }
match
  • POST localhost:9200/nba/_search
{  	"query": {  		"match": {  			"position": "后卫"  		}  	}  }
{  	"took": 89,  	"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": 4,  	"timed_out": false,  	"_shards": {  		"total": 1,  		"successful": 1,  		"skipped": 0,  		"failed": 0  	},  	"hits": {  		"total": {  			"value": 1,  			"relation": "eq"  		},  		"max_score": 3.0384295,  		"hits": [{  			"_index": "nba",  			"_type": "_doc",  			"_id": "1",  			"_score": 3.0384295,  			"_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"  		}  	}  }