Mysql 弹性搜索复杂场景
我对弹性搜索很陌生。我有一个复杂的场景,我无法为此获得正确的解决方案(弹性查询/参数)。任何帮助都将不胜感激 我的领域Mysql 弹性搜索复杂场景,mysql,
elasticsearch,Mysql,
elasticsearch,我对弹性搜索很陌生。我有一个复杂的场景,我无法为此获得正确的解决方案(弹性查询/参数)。任何帮助都将不胜感激 我的领域 产品名称(字符串) 价格最低 最高价格 可用性状态(可用/不可用) 除此之外,搜索将始终筛选唯一用户。所以Mysql查询看起来像: Select * from product where product_name like %xxx% AND price >= price_min AND price <= price_max AND availability =
- 产品名称(字符串)
- 价格最低
- 最高价格
- 可用性状态(可用/不可用)
Select * from product where product_name like %xxx% AND price >= price_min AND price <= price_max AND availability = availability_ status AND user = 1;
从产品中选择*,其中产品名称如%xxx%和价格>=price\u min和price您需要在此处使用筛选器,因为您需要精确匹配,而不是全文匹配。这样速度更快
{
"query": {
"filtered": {
"query": {
"match": { "name": "YourName" }
},
"filter": {
"bool": {
"must": [
{ "range": { "price_min": { "gte": 20 }}},
{ "range": { "price_max": { "lte": 170 }}},
{ "term" : { "availability" : "false" }} ]
}
}
}
}
}
“yourName”中提供的是全文匹配(如果分析名称字段,将检索类似的名称)。我假设您保持不变,因此默认情况下会分析该字段(词干+停止字删除)。
因为您需要结果来匹配所有条件,所以它是一个AND组合。因此使用
bool过滤器和所有术语
您需要在此处使用筛选器,因为您需要精确匹配,而不是全文匹配。这样速度更快
{
"query": {
"filtered": {
"query": {
"match": { "name": "YourName" }
},
"filter": {
"bool": {
"must": [
{ "range": { "price_min": { "gte": 20 }}},
{ "range": { "price_max": { "lte": 170 }}},
{ "term" : { "availability" : "false" }} ]
}
}
}
}
}
“yourName”中提供的是全文匹配(如果分析名称字段,将检索类似的名称)。我假设您保持不变,因此默认情况下会分析该字段(词干+停止字删除)。
因为您需要结果来匹配所有条件,所以它是一个AND组合。因此使用
bool过滤器和所有术语
鉴于您的SQL查询
SELECT *
FROM product
WHERE product_name LIKE '%xxx%'
AND price >= price_min
AND price <= price_max
AND availability = availability_status
AND user = 1;
鉴于您的SQL查询
SELECT *
FROM product
WHERE product_name LIKE '%xxx%'
AND price >= price_min
AND price <= price_max
AND availability = availability_status
AND user = 1;
请在此处添加您的输入:请在此处添加您的输入: