私はElasticsearchクエリで最高のパフォーマンスを得ようとしています。
私は、このMySQLのクエリのようなものが必要です。field_a
の値の数は1とのは、20 すべてのフィールドが完全一致を必要と言わせ間とすることができるMySQLクエリからElasticsearchクエリ
SELECT * FROM table WHERE field_a IN ('value1', 'value2') AND field_b = value
を。
今私は、クエリを使用しています:
{
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"should" : [
{ "term" : {"field_a" : "value1"}},
{ "term" : {"field_a" : "value2"}}
],
"must" : {
"term" : {"field_b" : "value"}
}
}
}
}
}
}
をインデックスは、この時点では約30万件のドキュメントを持っており、このクエリは0.04sで結果を返します - (cURLを経由して)0.06s。
必要な結果を得るためのより良い方法はありますか?
更新
field_aは解析されない文字列です。
field_bは整数です。あなたはfield_a
のと比較する値のリストを持っている場合は
'field_a 'の値は数値ですか?そうであれば、広範囲のチェックのために 'gt'と' lt'演算子を使うことができます。 –
本当に一定スコアブロックが必要ですか?とにかくフィルタブロックを使用しているので、採点はあなたにとって重要ではありません。 – shiladitya
@AvihooMamka 'field_a'は数値ではありません。 –