ElasticSearch - 如果没有结果则再次查询

时间:2017-10-02 15:06:01

标签: ruby-on-rails elasticsearch elasticsearch-rails

我有一个在产品目录上运行良好的查询。我的查询目前在multi_match中使用模糊性,但我更希望搜索使用模糊选项,如果相同的查询(没有模糊性)没有返回任何结果。这可以在查询中做到吗? (使用Rails 5)

这是我当前的查询:

@products = Product.search(
       query:{
         function_score:{
           query:{
             bool:{
               must:{
                 multi_match:{
                   fields: ['brand^10', '_all'],
                   query: "#{query}",
                   fuzziness: "AUTO"
                 }
               },

                 filter:{
                   bool:{
                     must:filters
                   }
                 }

             }
           },
           field_value_factor:{
              field: "popularity",
              modifier: "log1p",
              factor: 0.5

           },
           boost_mode: "sum"
         }
       }).page(page).per(25)

1 个答案:

答案 0 :(得分:0)

我经常做的是使用带有2个匹配子句的bool查询,一个没有模糊,我将分数提高了2或3倍,相互之间的模糊匹配也将尝试使用模糊匹配但是使用较少的得分所以它将在列表的末尾。

我展示了与this gist类似的内容。

基本上做类似的事情:

DELETE user
POST user/doc
{
  "name": "David"
}
GET user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": {
              "query": "david",
              "boost": 3.0
            }
          }
        },
        {
          "match": {
            "name": {
              "query": "david",
              "fuzziness": 2
            }
          }
        }
      ]
    }
  }
}
GET user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": {
              "query": "dovad",
              "boost": 3.0
            }
          }
        },
        {
          "match": {
            "name": {
              "query": "dovad",
              "fuzziness": 2
            }
          }
        }
      ]
    }
  }
}