2017-02-07 10 views
0

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

$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

Вы можете поделиться своими схемами – user3775217

ответ

0

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

$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, 
     ], 
    ], 
];