0

我有一个在产品目录上运行良好的查询。我的查询当前在 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)
4

1 回答 1

0

我经常做的是使用带有 2 个匹配子句的布尔查询,一个没有模糊,我将分数提高 2 或 3 倍,另一个使用模糊匹配,它也将尝试模糊但分数较低,所以它将在列表的末尾。

我用这个 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
            }
          }
        }
      ]
    }
  }
}
于 2017-10-02T15:11:11.060 回答