2016-04-13 13 views
0

私はElasticsearchをはじめて使用しており、索引付けと基本的な検索がダウンしていますが、私はいくつかの複雑な検索を行うことを検討しています。Elasticsearch PHPクライアントでフィールドブースティングを行うにはどうすればよいですか?

PHPクライアントでは、部分検索とフィールドブースト/関連性はどのようにして得られますか?最終的には、部分一致、完全一致、および一部のフィールドの追加を目的として、複数のフィールドを検索したいと考えています。

これまで私がこれまで持っていたことはありますが、動作させることはできません。 Elasticsearchのドキュメントは良くありません。

$show_params = [ 
    'index' => env('ES_INDEX'), 
    'type' => 'show', 
    'size' => 6, 
    'body' => [ 
     'query' => [ 
      'bool' => [ 
       'should' => [ 
        [ 
         'match' => [ 
          'title' => [ 
           'query' => '*' . $q . '*', 
           'boost' => 2 
          ] 
         ] 
        ], 
        [ 
         'match' => [ 
          'synopsis' => '*' . $q . '*' 
         ] 
        ] 
       ] 
      ] 
     ] 
    ] 
]; 

$client = \Elasticsearch\ClientBuilder::create()->build(); 

$show_raw_results = $client->search($show_params); 

答えて

0

基本matchクエリは、クエリが(高め構文は、しかし、正しいです)働いていない理由である、ワイルドカードをサポートしていません。

あなたがwildcard query使用して試すことができますが、それは(特に、それはあなたの入力テキストが「事前に分析」にする必要があることnot_analyzedクエリ、である)いくつかの制限があります。しかし

$show_params = [ 
    'index' => env('ES_INDEX'), 
    'type' => 'show', 
    'size' => 6, 
    'body' => [ 
     'query' => [ 
      'bool' => [ 
       'should' => [ 
        [ 
         'wildcard' => [ 
          'title' => [ 
           'value' => '*' . $q . '*', 
           'boost' => 2 
          ] 
         ] 
        ], 
        [ 
         'wildcard' => [ 
          'synopsis' => '*' . $q . '*' 
         ] 
        ] 
       ] 
      ] 
     ] 
    ] 
]; 

$client = \Elasticsearch\ClientBuilder::create()->build(); 

$show_raw_results = $client->search($show_params); 

、これは必ずしも最良のアプローチではありません。ワイルドカードは遅く、多数の文書を取り戻します(これは、スコアの低い、関連性の低いヒットが多いため)ユーザーを苛立たせる可能性があります。

さらに重要なことに、ワイルドカードはnot_analyzedクエリです。つまり、クエリテキストは解析されません。 "quick brown fox"を検索した場合、上記のクエリでは、複数トークン(["quick","brown","fox"])に分割して検索するのではなく、正確に1つのトークンであるかのようにインデックスを"*quick brown fox*"に検索します。

Partial Matchingのデファイニングガイドのセクションを読んだり、Fulltext Searchの章の始めから始めてみてください。部分的な/ファジーなマッチングで適切な結果を得るには、分析とトークン化をよく理解する必要があります。

関連する問題