2016-09-19 7 views
0

私は弾性検索2.3を使用してワイルドカード検索を使用したいと思います。公式のPHPクライアントを使用します。弾性検索2.3ワイルドカードクエリは完全一致の結果を返しません

私はこのようなものです問題は直面しています:私は言葉木材を検索する場合

ケース1を、それがhollywoodbollyウッドマン、ハリウッドを有している単語を返します。

ケース2ですが、ハリウッドを検索すると、ハリウッドを持っている言葉は返されません。

しかし、すべてがこのようなクエリ文字列で行われたときに正常に動作している:私は何を私わからない

"query" => [ 
      "bool" => [ 
       "must" => [ 
        [ 
         "wildcard" => [ 
          'name' => "*$keyword*", 
         ] 
        ], 
        [ 
         "nested" => [ 
          "path" => "address", 
          "score_mode" => "max", 
          "query" => [ 
           "bool" => [ 
            "must" => [..match[] parameters..] 
           ] 
          ] 
         ] 
        ] 
       ] 
      ] 

"query" => [ 
      "query_string" => [ 
       "query" => "*$keyword*", 
       "analyze_wildcard" => true, 
       "fields" => $fields 
      ] 
     ], 

しかしfollwingのように使用する場合、ケース2が動作していません間違っている。助けてください。

EDIT:

注:not_analysedとして、私はフィールドを作ってきました。 カードを探したが段ボール

感謝を検索するときに段ボールを返さないとき

私のクエリは、段ボールを返しています。

答えて

0

あなたがquery_stringオブジェクトの下にそれを使用、またはindex: not_analyzedにそのフィールドのマッピングを変更することができますいずれかのワイルドカード機能を使用したいと、あなたができるようになる場合Elasticsearchのみnot_analyzedフィールドだから、

wildcard queriesをサポートしていますワイルドカード検索を行います。私はnot_analysed ` '名前' => [ "タイプ"=> "文字列"、 "インデックス"=> "not_analyzed"、 ]` しかし、まだやることができないとしてフィールドを作った

+0

それ。 –

+0

私の質問は** cardboard **を** card **を検索すると返されますが、** cardboard **は** cardboardを検索すると返されません。 –

+0

フィールドが 'not_analyzed'にマッピングされていますか? '/ _mapping'エンドポイントを確認して確認してください。私はそれをテストしたところで、フィールドにワイルドカードクエリを使用して 'name:" cardboard "がある場合に' * cardboard * 'を検索し、正しい結果を戻すことができます。 –

関連する問題