2016-09-03 6 views
-1

私は、大量のデータストレージと検索機能を処理するためにelasticsearchを使用する大きなデータプロジェクトに取り組んでいます。具体的には、Java APIを使用して多くの索引付けおよび検索操作を実行します。アプリケーションが設計された方法の一部は、アプリケーションが「生きている」と言えば、elasticsearchクラスタに対してすべてのインデックスが存在することを確認するチェックがあり、そうでない場合は、設定ファイルに定義されている設定/マッピングで作成されます。弾性検索プログラムの設定

私はそれを悪いアプローチと見て、自分の思考/アプローチが正しいかどうかを知りたいと思っていました。私は実際にインデックスを作成し、すべてのタイプマッピングを見ることができます。これは、伝統的にプログラマチックに行われたことではなく、リレーショナルデータベースの世界でテーブルの作成と制約の設定方法に似ています。私はあなたがあらかじめ保存しようとしているタイプのマッピングを明示的に設定する必要はないことを理解しています。これはelasticsearchがマッピングのための最良の推測を与えるためですが、私はあなたがインデックスとマッピングがあらかじめ設定されていて、コードで行われたマッピングやインデックスの初期化は一切ありません。思考?私は非常に長いESをまだ学んでいませんが、まだ学習していますが、それはちょうど私には見えません。

答えて

0

一般に、データを格納した後(すべてのデータを再索引付けせずに)マッピングフィールドのタイプを変更することはできないため、マッピングタイプを計画することは賢明です。これは、正確に一致させたいテキストフィールドがある場合は特に問題です。デフォルトでは、elasticsearchはそれらの文字列を解析し、それらをファジィ検索で簡単にマッチングできる構造に分解することによって、文字列フィールドのインデックスを作成します。しかし、これはその文字列を正確に一致させることができないことが多いことを意味します。

たとえば、マッピングに電子メールアドレスを含むフィールドが含まれている場合、デフォルトではマッピングが保存されるときに分析されます。これは、次へのマッピングの種類を設定することにより変更することができます:ここ

{ 
    "type":"string", 
    "index":"not_analyzed" 
} 

最も重要なことは、あなたがそれにデータを格納を開始する前にこれを設定しない場合、その後、あなたが変更できない、ということですそれ。