ElasticSearche高性能queryとfilterクエリ文の探索
2419 ワード
リンク:http://blog.ifootsteps.com/?p=96
ElasticSearchクエリ文は主に二つがあります.一つはqueryで、一つはfilterです.queryには採点過程が必要ですので、filterによっては遅くなります.普通のmatchはまたtermsより遅くなります.だから、filterとtermが一緒になると効率がもっと上がります.
たとえば:
GET index/type/_search
{
"query": {
"filtered": {
"filter": {
"query": {
"terms": {
"name": [
" ",
" ",
" ",
" "
],
"minimum_match": 2
}
}
}
}
}
}
現在のminimum_matchの値はtermsの数/2を上にセットします.この文は現在使用されている最高効率の無採点文です.java転化は簡単です.例を貼りません.
もう一つは採点付きのquery文です.
GET index/type/_search
{
"query": {
"bool": {
"should": [
{
"terms": {
"name": [
" ",
" ",
" "
],
"minimum_match":2
}
}
]
}
}
}
この2つは両方利用するtermsで、つまり照会する時はelasticsearchの分詞プラグインを利用して、照会する前に予分詞を使って、分詞の結果を調べます.だから、matchを使って検索することもできます.もちろん効率は低いです.
GET index/type/_search
{
"query": {
"filtered": {
"filter": {
"query": {
"match": {
"name": {
"query": " ",
"operator": "and"// or and
}
}
}
}
}
}
}
もちろん一番簡単な検索方法があります.GET index/type/_search?size=1
{
"query": {
"match": {
"name": {
"query": " "
, "operator": "or"
}
}
}
}
ここではsizeを1に指定していますが、効率を上げるためには設定しなくてもいいです.デフォルトは10です.