1、query string search
搜索全部:GET /index/type/_search
结果剖析:
"took" : 14, 耗时几毫秒
"timed_out" : false, 是否超时,这里没有超时
"_shards" : {
"total" : 5, 数据拆成了5个分片,所以对于搜索请求,会达到所以的primary shard(或则是它的某个primary sha也可以)
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 3, 查询结果的数量。3个document
"max_score" : 1.0, score的含义:就是document对于一个search的相关度匹配的分数,分数越高,越相关就越匹配
"hits" : [ 包含了搜索匹配的document的详细数据
搜索商品指定名称,并且按照售价进行排序
格式:
GET /index/type/_search?q=name: 指定名称 & sort= price:desc
2、query DSL:Domain Specified language:特定领域的语言
http reques body:请求体,可以用json的格式来构建语法,比较简单,可以构建各种复杂的语法,比query string search强大
查询所有商品:
GET /index/type/_search
{
"query":{
"match_all" :{} //match_all:匹配全文
}
}
例子:
查询名称包含指定名称的商品,同时售价按照降序排序
GET /index/type/_search
{
"query": {
"match": { //match:只匹配一次
"name": "指定名称"
}
},
"sort": [
{ "price": "desc"}
]
}
分页查询商品,总共3条数据,假设每页显示一条数据,现在显示第二页,查出两条商品
GET /index/type/_search
{
"query": {
"match_all": {}
},
"from": 1, //从第几条数据开始查
"size": 2 //显示多少条数据
}
只查询名称和价格
GET /index/type/_search
{
"query": {
"match_all": {}
},
"_source": ["name","price"]
}
3、query filter(对数据进行过滤)
包含指定商品名称,而且价格大于30元的商品
GET /index/type/_search
{
"query": {
"bool": { //布尔表达式
"must": { //必须匹配(这里的意思是和指定商品,必须匹配)
"match":{
"name": "指定商品"
}
},
"filter": {
"range": { //区间范围
"price": {"gt": 25}
}
}
}
}
}
4、full-text search(全文检索)
GET /index/type/_search
{
"query": {
"match": {
"producer": "yagao producer"
}
}
}
5、phrase search(短语检索)
跟全文检索,完全相反,全文检索会将输入的搜索串拆开来,然后在去索引里面匹配,只要能匹配到任意一个拆解后的单词,就可以作为结果返回
短语检索,要求输入的搜索串,必须在指定的文本字段中,必须完全一模一样,才能被返回
GET /idnex /type/_search
{
"query": {
"match_phrase": {
"producer": "搜索串" 要求和文本的字段必须匹配或者文本中包含搜索串则被返回
}
}
}
6、highlight search(高亮显示)
搜索指定商品名称,并高亮显示
GET /ecommerce/product/_search
{
"query": {
"match": {
"producer": "指定商品"
}
},
"highlight": {
"fields": {
"producer":{} //producer:只是一个字段:也就是高亮的名称在该字段中包含
}
}
}