这篇文章给大家介绍ElasticSearch中如何使用多种搜索方式检索数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
GET http://{{es-host}}/ecommerce/produce/_search
结果:
{
"took": 38,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1.0,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": 1.0,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": 1.0,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": 1.0,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
}
}
]
}
}
解释:
took 标识检索花费的时间,单位毫秒
time_out 是否超时
_shards 数据拆分成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
total 检索5个分片
successful 成功5个
hits.total 检索到数据的总记录数
hits.max_score 相似度分数 最高为1
hits.hits 数据集合
hits.hits._index 索引名称
hits.hits._type 类型
hits.hits._score 数据评分
hits.hits._source 数据项内容
GET http://{{es-host}}/ecommerce/produce/_search?q=name:yagao&sort=price:desc
结果:
{
"took": 71,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": null,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": null,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
},
"sort": [
40
]
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": null,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
},
"sort": [
30
]
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": null,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
},
"sort": [
25
]
}
]
}
}
DSL:Domain Specified Language.特定领域的语言
http request body :请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大多了。
GET http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"match_all":{}
}
}
结果:
{
"took": 23,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1.0,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": 1.0,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": 1.0,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": 1.0,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
}
}
]
}
}
GET http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"match_all":{}
},
"_source":["name","price"]
}
返回结果:
{
"took": 57,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": 1,
"_source": {
"price": 25,
"name": "jiajieshi yagao"
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": 1,
"_source": {
"price": 30,
"name": "gaolujie yagao"
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": 1,
"_source": {
"price": 40,
"name": "zhonghua yagao"
}
}
]
}
}
GET http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"match":{
"name":"yagao"
}
},
"sort":{
"price":"desc"
}
}
结果:
{
"took": 384,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": null,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": null,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
},
"sort": [
40
]
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": null,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
},
"sort": [
30
]
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": null,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
},
"sort": [
25
]
}
]
}
}
搜索商品名称包含yagao,而且售价大于30元的商品
GET http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"bool":{
"must":{
"match":{
"name":"yagao"
}
},
"filter":{
"range":{
"price":{
"gt":"30"
}
}
}
}
}
}
返回结果:
{
"took": 88,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.25811607,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": 0.25811607,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
}
}
]
}
}
准备数据:
PUT http://{{es-host}}/ecommerce/produce/4
{
"name":"special yagao",
"desc":"special meibai",
"price":"50",
"producer":"special yagao producer",
"tags":["meibai"]
}
http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"match":{
"producer":"yagao producer"
}
}
}
检索时候会把"yagao producer" 分割成"yagao" 和"producer" 只要匹配上任何一个就是符合的数据
结果
{
"took": 20,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 0.70293105,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "4",
"_score": 0.70293105,
"_source": {
"name": "special yagao",
"desc": "special meibai",
"price": "50",
"producer": "special yagao producer",
"tags": [
"meibai"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": 0.25811607,
"_source": {
"name": "gaolujie yagao",
"desc": "gaolujie meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": 0.25811607,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": 0.1805489,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
}
}
]
}
}
最匹配的相关度评分高,会排在最前面。
对要搜索的词不再分词
GET http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"match_phrase":{
"producer":"yagao producer"
}
}
}
结果:
{
"took": 33,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.70293105,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "4",
"_score": 0.70293105,
"_source": {
"name": "special yagao",
"desc": "special meibai",
"price": "50",
"producer": "special yagao producer",
"tags": [
"meibai"
]
}
}
]
}
}
GET http://{{es-host}}/ecommerce/produce/_search
{
"query":{
"match":{
"name":"yagao"
}
},
"highlight":{
"fields":{
"name":{}
}
}
}
结果:
{
"took": 16,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 0.25811607,
"hits": [
{
"_index": "ecommerce",
"_type": "produce",
"_id": "1",
"_score": 0.25811607,
"_source": {
"name": "gaolujie yagao",
"desc": "gaolujie meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
},
"highlight": {
"name": [
"gaolujie <em>yagao</em>"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "3",
"_score": 0.25811607,
"_source": {
"name": "zhonghua yagao",
"desc": "caoben zhiwu",
"price": 40,
"producer": "zhonghua producer",
"tags": [
"qingxin"
]
},
"highlight": {
"name": [
"zhonghua <em>yagao</em>"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "2",
"_score": 0.16358379,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
},
"highlight": {
"name": [
"jiajieshi <em>yagao</em>"
]
}
},
{
"_index": "ecommerce",
"_type": "produce",
"_id": "4",
"_score": 0.16358379,
"_source": {
"name": "special yagao",
"desc": "special meibai",
"price": "50",
"producer": "special yagao producer",
"tags": [
"meibai"
]
},
"highlight": {
"name": [
"special <em>yagao</em>"
]
}
}
]
}
}
关于ElasticSearch中如何使用多种搜索方式检索数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/shxjinchao/blog/3089407