七、ElasticSearch类似Mysql的not in 和 in 查询

  • ElasticSearch 的IN查询
//查询数据在goods_id为[1,2,3]的所有数据,类似Mysql IN (1,2,3)
{
 "query":{
    "bool": {
	"must": [
		{
    		"match_all":{}
		}, 
		{
			"terms": {
				"goods_id": [1,2,3]
			}
		}
		]
	}
    
  }
}


//匹配查询多数用在商城首页商品搜索(推荐)

{
	"from": 0,
	"query": {
		"bool": {
			"must": [{
				"multi_match": {
					"fields": ["goods_name", "brand"],
					"query": "北京测试商品001-3",
					"type": "most_fields"
				}
			}]
		}
	},
	"size": 100,
	"sort": {		
	  "price": {
			"order": "desc"
		},
		"views": {
			"order": "desc"
		}
	}
}
  • ElasticSearch 的 NOT IN 查询
//查询数据不在goods_id为[1,2,3]的所有数据,类似Mysql NOT IN (1,2,3)
{
 "query":{
    "bool": {
	"must": [
		{
    		"match_all":{}
		}
		]
	},
	"must_not"[
			{
			"terms": 
				{
					"goods_id": [1,2,3]
				}
			}]
		}
	]
  }
}
  •  ElasticSearch 分页、排序以及多字段匹配查询
//分页、排序以及多字段匹配查询,fields为查询关键词需要匹配的字段;query关键词;type查询类型 most_fields总体算分最高的
{
	"from": 0,
	"query": {
		"bool": {
			"must": [{
				"multi_match": {
					"fields": ["goods_name", "brand"],
					"query": "北京测试商品001-3",
					"type": "most_fields"
				}
			}, 
			{
				"terms": {
					"goods_id": [6]
				}
			}]
		}
	},
	"size": 100,
	"sort": {
		"mall_sort_order": {
			"order": "desc"
		},
		"sales": {
			"order": "desc"
		}
	}
}
  •  ElasticSearch 按照单个字段算分从高到低进行排序

{
	"from": 0,
	"query": {
		"bool": {
			"must": [{
				"multi_match": {
					"fields": ["goods_name", "brand"],
					"query": "神经系统",
					"type": "best_fields"
				}
			}]
		}
	},
	"size": 100,
	"sort": {
	  "_score":{
	    	"order": "desc"
	  }
	}
}


等同于
POST dev_shop_index/_search
{
 "query":{
  "dis_max" : {
   "queries":[
    {
     "match":{
      "goods_name" : "神经系统"
     }
    },
    {
     "match" : {
      "brand" : "神经系统"
     }
    }
    }
   ]
  }
 }
}



等同于
{
  "query": {
    "multi_match": {
		"fields": ["goods_name", "brand"],
		"query": "神经系统",
		"type": "best_fields"
    }
  } 
}








原创文章 138 获赞 12 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_38004619/article/details/104825975