2016-06-13 6 views
9

私は中位サイズの文書(15-30 Mb以上)を持つESインデックスを持っています。弾性検索:文書のサイズとクエリのパフォーマンス

各ドキュメントにはブール値フィールドがあり、ほとんどの場合、特定のドキュメントIDにそのフィールドがtrueに設定されているかどうかを知りたいと思っています。

文書サイズがこのクエリのパフォーマンスに影響しますか?

"size": 1, 
    "query": { 
     "term": { 
     "my_field": True 
     } 
    }, 
    "_source": [ 
     "my_field" 
    ] 

また、「サイズ」:0クエリの方が時間パフォーマンスが向上しますか?

+0

"_source"の代わりに "fields"を使用してはいけませんか? BTW。彼の答えの両方のジョルディバードアドバイスは、パフォーマンスに役立つはずです。 インデックスを持っていれば、テストを確実に行うだけです! –

答えて

1

クエリに"size":0を追加すると、一部のネット転送が回避され、この動作によってパフォーマンス時間が改善されます。

しかし、私は使用のケースを理解し、あなたはcount

例のクエリを使用することができます。

curl -XPOST 'http://localhost:9200/test/_count -d '{ 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "id": xxxxx 
       } 
      }, 
      { 
       "term": { 
       "bool_field": True 
       } 
      } 
      ] 
     } 
     } 
    }' 

このクエリは唯一のいくつかの合計がある場合は、あなたがもしドキュメントを知っていますチェックしていくつかのidは、クエリのbool_fieldで指定した値に応じて、boolフィールドをtrue/falseに設定しています。これはかなり速いでしょう。

1

Elasticsearchがフィールドのインデックスを作成することを考慮すると、ドキュメントサイズはパフォーマンスにとって大きな問題にはなりません。サイズ0を使用すると、Elasticsearch内のクエリのパフォーマンスには影響しませんが、ネットワーク転送のためにドキュメントを取得するためのパフォーマンスに正の影響を与えます。

あなただけちょうどこのように、チェックしたいフィールドを取得するあなたは、単に文書を取得するためにGet APIを使用することができ、特定のドキュメントの1つのブールフィールドを確認したい場合:

curl -XGET 'http://localhost:9200/my_index/my_type/1000?fields=my_field' 

をElasticsearchがする。この場合、 _id = 1000とフィールドmy_fieldでドキュメントを取得するだけです。ブール値をチェックすることができます。

{ 
    "_index": "my_index", 
    "_type": "my_type", 
    "_id": "1000", 
    "_version": 9, 
    "found": true, 
    "fields": { 
    "my_field": [ 
     true 
    ] 
    } 
} 
1

あなたの質問を見ると、使用しているelasticsearchのバージョンについては言及していないことがわかります。私はelasticsearchクラスターのパフォーマンスに影響を与える多くの要因があると言います。

ただし、最新のelasticsearchであることを前提とし、単一の値の後であることを考慮すると、スコアリング以外のフィルタリングクエリにクエリを変更するのが最善の方法です。フィルタはelasticsearchでかなり速く、非常に簡単にキャッシュされます。クエリを非スコアリングにすると、得点フェーズが完全に回避されます(関連性の計算など)。我々は、検索APIを使用している

GET localhost:9200/test_index/test_partition/_search 
{ 
"query" : { 
    "constant_score" : { 
     "filter" : { 
      "term" : { 
       "my_field" : True 
      } 
     } 
    } 
} 

}

注:これにに

。 constant_scoreは、用語クエリをフィルタに変換するために使用されます。フィルタは本質的に高速である必要があります。

詳細については、参照してください