У нас есть довольно простой запрос, который мы используем, чтобы позволить пользователям предоставлять текст запроса, а затем он повышает совпадения в разных полях.Теперь мы хотим добавить еще одно повышение на основе голосов , но не уверены, куда вложить FunctionScore
in.
Наш первоначальный запрос:
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.MultiMatch(mm => mm
.Fields(f => f
.Field("name^5")
.Field("hobbies^2")
)
.Query(queryText)
)
)
);
ЕслиЯ пытаюсь вложить в FunctionScore
вокруг MultiMatch
, он в основном игнорирует запрос / поля и просто возвращает все в индексе:
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.FunctionScore(fs => fs
.Query(q2 => q2
.MultiMatch(mm => mm
.Fields(f => f
.Field("name^5")
.Field("hobbies^2")
)
.Query(queryText)
)
)
)
)
);
Я ожидаю, что, поскольку я не предоставляюFunctionScore
или любой Functions
, это должно в основном делать то же самое, что и выше.Затем простое добавление FunctionScore
обеспечит повышение результатов на основе функций, которые я ему даю (в моем случае повышение на основе поля votes
просто FieldValueFactor
).
Документация по этому вопросунемного нечетко, особенно с некоторыми комбинациями, такими как MultiMatch
, FunctionScore
и текст запроса.Я нашел этот ответ , но он не распространяется при включении текста запроса.
Я почти уверен, что это сводится к моему все еще неясному пониманию того, как работают упругие запросы, но яЯ просто не нахожу много, чтобы покрыть (что я думаю довольно распространенный) сценарий:
- Пользователь, вводящий запрос
- Повышение совпадений этого запроса с определенными полями
- Увеличение всех результатов на основе значения числового поля