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
}
}
}
]
}
}
}