2017-02-07 12 views
0

PHPクライアントでElasticsearchでクエリを試み、部分的な単語の一致に優先順位をつけますが、依然としてファジーマッチが含まれています。 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

スキーマのマッピングを共有できますか – user3775217

答えて

0

私はまだESには新しい可能性があると思われますが、この解決法は後にデータを取得するようです。誰かがこれを将来見るともっと理想的な方法があるかもしれないので、私はそれだけを言います。 toからtoへの切り替えと配列のラッピングはちょっと違ったやり方でした。

$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, 
     ], 
    ], 
]; 
関連する問題