elasticsearch,Mysql,elasticsearch" /> elasticsearch,Mysql,elasticsearch" />

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 =

我对弹性搜索很陌生。我有一个复杂的场景,我无法为此获得正确的解决方案(弹性查询/参数)。任何帮助都将不胜感激

我的领域

  • 产品名称(字符串)
  • 价格最低
  • 最高价格
  • 可用性状态(可用/不可用)
除此之外,搜索将始终筛选唯一用户。所以Mysql查询看起来像:

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;

请在此处添加您的输入:请在此处添加您的输入: