Elasticsearch Частичное совпадение или нечеткое совпадение, повысить частичные результаты

Попытка сделать запрос в Elasticsearch с клиентом PHP и отдать приоритет частичным совпадениям слов, но при этом включить нечеткие совпадения. Если я удаляю сопоставленный блок address.company, запрос работает, как и ожидалось, но не работает с ним, независимо от того, как я его создаю. Я потерял форматирование, чтобы включить нечеткие поиски с более низким приоритетом?

    $search_data = [
"from"  => (int) $start, "size" => (int) $count,
'query' => [
'bool' => [
'filter' => [
['term' => ['active' => 1]],
['term' => ['type' => 2]],
],
'must'   => [
'wildcard' => [
'address.company' => '*' . $search_query . '*'
],
'match'    => [
'address.company' => [
'query'     => $search_query,
'operator'  => 'and',
'fuzziness' => 'AUTO',
],
],
],
],
],
];

0

Решение

В то время как я все еще плохо знаком с ES, вероятно, это решение позволяет получить данные, которые мне нужны. Я только упоминаю об этом, потому что может быть более идеальный способ, если кто-то увидит это в будущем. Переключение с must на must и упаковка массивов немного по-другому сделали свое дело.

$search_data = [
"from"  => (int) $start, "size" => (int) $count,
'query' => [
'bool' => [
'filter' => [
['term' => ['active' => 1]],
['term' => ['type' => 2]],
],
'should'   => [
[
'match' => ['address.company' => ['query'=>$search_query,'boost'=>10]],
],
[
'match' =>
[
'address.company' =>
[
'query'     => $search_query,
'fuzziness' => 'AUTO',
],
],
],
],
'minimum_should_match'=>1,
],
],
];
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]