一尘不染

elasticsearch复杂方案

elasticsearch

我是Elastic Search的新手。我的场景很复杂,无法为此找到正确的解决方案(弹性查询/参数)。任何帮助将不胜感激。

我的领域

  • 产品名称(字符串)
  • 价格最低
  • 最高价格
  • 可用性状态(可用/不可用)

除此以外,搜索始终将针对唯一用户进行过滤。所以Mysql查询看起来像:

Select * from product where product_name like %xxx% AND price >= price_min AND price <= price_max AND availability = availability_ status AND user = 1;

我喜欢精确的elasticsearch参数来解决这种情况,或者大约解决方案也将不胜感激。


阅读 298

收藏
2020-06-22

共1个答案

一尘不染

您需要在此处使用过滤器,因为您需要完全匹配而不是全文匹配。而且这种方式甚至更快。

 {
  "query": {
    "filtered": { 
      "query": {
        "match": { "name": "YourName" }
      },
      "filter": {
        "bool": {
           "must": [ 
           { "range": { "price_min": { "gte": 20 }}},
           { "range": { "price_max": { "lte": 170 }}},
           { "term" : { "availability" : "false" }} ]
        }
      }
    }
  }
}

您在“您的姓名”中提供的是全文匹配项(如果对名称字段进行了分析,则将检索相似的名称)。我假设您保持不变,因此默认情况下会分析该字段(词干+停用词删除)。由于您需要结果来匹配所有条件,因此必须使用AND组合。因此使用

bool过滤所有AND项。

2020-06-22