Elasticsearch検索チューニングDefinitive Guideの(2/3)

この記事では、最初のインターネット技術においてin vivoマイクロチャネル公共番号を登場https://mp.weixin.qq.com/s/AAkVdzmkgdBisuQZldsnvg
:オリジナルの英語テキストhttps://qbox.io/blog/elasticsearch-search-tuning-part-2
作成者:Adam Vanderbush
翻訳:Yangzhenタオ

ディレクトリ

  1. 前のインデックスデータ
  2. マッピング
  3. スクリプトを使用しないでください
  4. 読み取り専用のインデックスをマージすることを余儀なく

Elasticsearch検索チューニングDefinitive Guideのは、QBOXの一つが、この記事はシリーズの第2弾で、彼のブログ上で一連の記事を掲載され、インデックス前処理、マッピングは、スクリプトの使用を避けるために、確立され、合併またはその他の検索インデックスセグメントの業績を紹介関連のチューニング方法。

この記事では、最初の二つでElasticsearch検索チューニングシリーズ3で、ここで最初に見つかった1(クリックしてください)Elasticsearch 5.0で、検索のチューニング技術、戦略と提言のバージョン上記の議論を促進するために設計されたチュートリアルのこのシリーズ。

1.前のインデックスデータ

データのインデックスを最適化するために、それのいくつかは、クエリ内のプリセットモードにする必要があります。たとえば、すべての文書が通話している場合、価格の固定リストの範囲の価格のフィールドの、およびクエリの実行の最も範囲の重合を、あなたは、インデックスの範囲インデックス事前ことができ、使用する用語の重合を促進するために、重合を。

たとえば、次のドキュメント:

curl -XPUT 'ES_HOST:ES_PORT/index/type/1
?pretty' -H 'Content-Type: application/json' -d '{
 "designation": "bowl",
 "price": 13
}'

そして、検索要求は次のとおりです。

curl -XGET 'ES_HOST:ES_PORT/index/_search
?pretty' -H 'Content-Type: application/json' -d '{
 "aggs": {
   "price_ranges": {
     "range": {
       "field": "price",
       "ranges": [
         { "to": 10 },
         { "from": 10, "to": 100 },
         { "from": 100 }
       ]
     }
   }
 }
}'

その後、フィールドがキーワードにマッピングする必要があり、インデックスステージでprice_rangeフィールドを追加することができます。

curl -XPUT 'ES_HOST:ES_PORT/index
?pretty' -H 'Content-Type: application/json' -d '{
 "mappings": {
   "type": {
     "properties": {
       "price_range": {
         "type": "keyword"
       }
     }
   }
 }
}'

curl -XPUT 'ES_HOST:ES_PORT/index/type/1
?pretty' -H 'Content-Type: application/json' -d '{
 "designation": "bowl",
 "price": 13,
 "price_range": "10-100"
}'

次に、検索要求はなく、この新しいフィールドで重合させることができる  価格  高分子フィールドの範囲を実施します。

curl -XGET 'ES_HOST:ES_PORT/index/_search
?pretty' -H 'Content-Type: application/json' -d '{
 "aggs": {
   "price_ranges": {
     "terms": {
       "field": "price_range"
     }
   }
 }
}'

2.マッピング

実際には、いくつかの数値データは、数値フィールドにマップされる、常にというわけではありません。典型的には、例えば、それらのメモリ  ISBNの 識別子など、または他のフィールドの任意の数は、データベース内のレコードを識別し、キーワードをする特定のマッピングにマッピングすることができる  整数  または ロング  タイプより良いです。

以下のような構造化コンテンツのキーワードタイプのインデックス、  電子メール アドレス、ホスト名、ステータスコード、郵便番号またはラベル。

通常、ソート、集計、(例えば、すべての公開ブログ記事を見つけるために)フィルタ処理に使用されます。キーワードフィールドは、その正確な値を検索することによって得ることができます。

あなたがインデックスにのようなフルテキストコンテンツが必要な場合は  、メールの  内容や製品の説明を、テキストフィールドを使用する必要があります。

ここでは、キーフィールドマッピングの例です。

curl -XPUT 'ES_HOST:ES_PORT/my_index
?pretty' -H 'Content-Type: application/json' -d '{
 "mappings": {
   "my_type": {
     "properties": {
       "tags": {
         "type":  "keyword"
       }
     }
   }
 }
}'

2.xの インデックスインポートバージョンキーワードをサポートしていません。その代わり、彼らがしようとします  キーワード  にダウングレードタイプ  、文字列 タイプ。これは、新しいマップや古地図の統合をサポートしています。長年のインデックスは、あなたがしてアップグレードする必要がありますバージョン6.x  以前のバージョンの再構成を、しかし復興を実現するための独自の計画に応じてマップをダウングレードする機会を提供しています。

3.スクリプトを使用しないでください

一般的には、スクリプトを使用して回避しようと、あなたは、好みを使用する必要がある場合は  無痛  と表現エンジンを。

無痛は、  専用に設計されたシンプルかつ安全なスクリプト言語である  Elasticsearchの 使用及び設計  Elasticsearch 安全に使用すると、インラインスクリプトを保存することができ、デフォルトのスクリプト言語。 無痛 より詳細に構文や言語機能、参照してください  無痛 言語仕様を。

「を参照してください  elasticsearchで痛みのないスクリプト  」をより深く理解  無痛  スクリプト言語ガイド。

  • Luceneの式言語

Lucene  式はなり javascriptの  表現、バイトコードにコンパイルされたカスタム高性能評価やソート機能のために設計されており、サポートされ  、インライン 、デフォルトのストレージ・スクリプトを。

  • 演奏

カスタムに関して式 のLucene コードが懸念しているそれはより良い性能を持っている、他のスクリプトエンジンにその性能の相対的な低コスト、単一の文書があります。より多くの表現「のリードを。」

これは非常に高速な実装を可能にする、はるかに高速に独自のスクリプトを記述するよりも、特にローカル。

  • 文法

式はサポート  JAのvascriptの  単一の式:構文のサブセットを。サポートされる演算子と関数のドキュメント発現モジュールを参照してください。

スクリプト変数にアクセスすることができます式は以下のとおりです。

  • そのようなドキュメントなどのドキュメントフィールド、[「myFieldで」]値
  • このようDOC [「のMyField」]。空としてサポートされているフィールド変数やメソッド、
  • このようmymodifierとしてスクリプトパラメータに渡されます
  • 現在のドキュメントのスコア、_score(のみ有効script_scoreで使用されます)

式のスクリプトは、単に式にパラメータを設定するには、script_score、script_fields、スクリプト、および数値重合ソーティングスクリプトを使用することができます。

4. A読み取り専用合成必須のインデックスを

読み取り専用インデックス、1つのパラグラフに合併後の非常に利点となります。典型的なケースは、時間の指標に基づいています:古いインデックスは読み取り専用にする一方で、現在のインデックスだけの時間は、新しいドキュメントウィンドウになります。

強制合併  のAPI  を通じてサポート  APIは、  1つ以上の索引をマージすることを余儀なく。各シャード組み合わせる  のLucene関連するセグメントインデックスの数。セグメントをマージすることによってサポートされているマージ操作の数を減らすことを余儀なく。

合併がブロックされる前にコールが完了します。場合  のHTTP 接続が切断され、要求が強制合併前の前に、バックグラウンドで継続されます、すべての新しい要求がブロックされます。

curl _XPOST 'ES_HOST:ES_POST/twitter/_forcemer
ge?pretty'

合力の  API  パラメータを、次のリクエストを受け付けます。

  • max_num_segments - マージされるセグメントの数。完全にインデックスをマージするには1に設定することができます。デフォルトでは、単純に合併を実行する必要があるかどうかをチェックし、もしそうであれば、実行されます。
  • only_expunge_deletes -スキームの合併は単に削除されたセクションが含まれて消去されます。では  Luceneに 、文書は直接だけで削除対象としてマークからセクションを削除しません。合併プロセスのセグメントでは、新しいセクションを作成することができ、この新しいセクションが削除されたものは含まれません。このタグは、削除されたセグメントに関連するパラメータのみをサポートしており、デフォルトはこれはindex.merge.policy.expunge_deletes_allowedしきい値を無効にしないことに注意してください。
  • フラッシュ-強制合併後に実行するかどうか  フラッシュ、デフォルトは  trueに

もっとお楽しみに  生体内のインターネット技術の  マイクロチャネル公共数

 

注:マイクロ・シグナルとの記事を転載してください:labs2020  連絡を。

おすすめ

転載: www.cnblogs.com/vivotech/p/11130716.html