2016-07-10 18 views
1

まず、貧しい私の英語のために申し訳ありませんが、私の問題を説明しようとしましょう。文字列Java APIのクエリでは、名前でドキュメントを見つけることができません。

私は、管理されたドキュメントにelasticsearch java apiを使用しているアプリケーションで作業しています。 すべてがうまく動作し、DBで検索してインデックスに保存することができます。フィールドで集計されたドキュメントやクールなものを数えることができますが、私は奇妙な問題に固執しました。

名前のフィールドで文書を検索しようとすると、文書の一部が検索で返されません。

私は例をあげてみましょう:

私の文書は(単なるたとえば)次のようになります:

ID:1 名:ブック タイプ:PDF

ID:2 名:私の検索サービスのテスト タイプ:zip

私が検索しようとすると、私は名前で検索した場合、パラメータとして "book"という値を送信しますが、それはうまく動作しますが、 gを検索し、パラメータ値 "service"を送信すると、結果は空になります。

ここに私の検索コード:

SearchRequestBuilder src1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery(parameter).field("name")); 

誰もが知っている、なぜIDが2の文書の名前フィールドに「サービス」を、私のパラメータの値を見つけることができません。この検索?

ありがとうございます!

追加情報:

私の一般的なインデックス情報:

{ 
    "template": "*", 
    "settings": { 
     "index.refresh_interval": "5s" 
    }, 
    "mappings": { 
     "_default_": { 
      "_all": { 
       "enabled": true 
      }, 
      "dynamic_templates": [ 
       { 
        "string_fields": { 
         "match": "*", 
         "match_mapping_type": "string", 
         "mapping": { 
          "index": "not_analyzed", 
          "omit_norms": true, 
          "type": "string" 
         } 
        } 
       } 
      ], 
      "properties": { 
       "@version": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
        } 
       } 
      } 
     } 
    } 
} 
+0

マッピング情報を追加できますか?あなたの情報をどのように索引付けしていますか? via elasticsearch-plugin? –

+0

こんにちは@VladislavKysliy、行方不明の情報には申し訳ありません。 私はelasticsearch java apiを使用して情報をインデックスに登録していますので、私のアプリケーションで自動的にインデックスが作成され、インデックスが作成されます。 すべての文字列フィールドを分析しないように設定する(インデックスステップで文字列値を分割しないように)、この設定にはマッピングセクションが存在します: –

+0

"dynamic_templates":[ { "string_fields" :{ "マッチ": "*"、 "match_mapping_type": "string" は、 "マッピング":{ "インデックス": "not_analyzed"、 "omit_norms":真、 "タイプ": "文字列" } } } ] –

答えて

0

まあ、時間と時間のために検索した後、私は私の問題を解決しました。

この問題を解決するために、elasticsearch java apiのワイルドカードクエリを使用しました。これで、自分のフィールドの文字列パラメータを検索できるようになりました。

ここでは、コードです:あなたSearchRequestBuilderの建設後

SearchRequestBuilder srch1 = client.prepareSearch() 
       .setIndices("index_name") 
       .setTypes("type_name") 
       .setSearchType(SearchType.DFS_QUERY_AND_FETCH) 
       .setQuery(QueryBuilders.wildcardQuery("field_name", "*"+string_parameter+"*")); 

ちょうどあなたMultipleSearchResponseまたはSearchResponseにそれを追加します。私の場合は

MultiSearchResponse sr = client.prepareMultiSearch() 
        .add(srch1) 
        .add(srch2) 
        .add(srch3) 
        .execute().actionGet(); 

、私は3つの異なる持っているが、クエリ、私はMultipleSearchResponseを使用しました。

関連する問題