ElasticSearch - запросить снова, если результатов нет

У меня есть запрос, который прилично работает в каталоге товаров. Мой запрос в настоящее время использует нечеткость в 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 ответ

То, что я часто делаю, это использование запроса bool с двумя предложениями совпадения, одно без нечеткого, которое я увеличиваю в 2 или 3 раза, другое - с нечетким совпадением, которое также будет пытаться с нечетким, но с меньшим счетом, так что будет в конце списка.

Я продемонстрировал нечто подобное с этой сущностью.

В основном сделать что-то вроде:

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
            }
          }
        }
      ]
    }
  }
}
Другие вопросы по тегам