Elasticsearch의 filter는 query보다 빠르다. filter에 cache를 적용하니 1000배 빨라지는 경우가 있었다. 메모리가 문제 없다면, 단순한 질의를 쓰는 것도 좋을 것 같다.
참고 : http://knight76.tistory.com/entry/elasticsearch-Query-vs-Filter
query 방식
curl -XGET http://es.google.com:9200/_search -d '
{
"query": {
"bool": {
"must": [
{
"match_all": {}
},
{
"term": {
"user.id": "5681810"
}
}
]
}
}
}'
이는 filter로 변환하고, cache를 적용해서 빠른 처리가 가능하다. 테스트해보니. filter 처리시간이 query에 비해 1/10로 줄어든 것 같다. (엄청 빨라졌다.)
curl -XGET http://es.google.com:9200/_search -d '
{
"query": {
"filtered": {
"filter": {
"term": {
"user.id": "5681810",
"_cache": "true"
}
}
}
}
}'
필터 캐쉬(filter cache)는 필터 결과를 캐쉬한다.
아래 참조 문서에 따르면, indices.cache.filter.size (디폴트는 10%)만큼 캐쉬한다.
indices.cache.filter.size는 퍼센트또는 크기로 캐쉬 크기를 결정할 수 있다.
필터를 쓰고, 필터 캐쉬도 쓴다 해도 어떤 필터를 쓰느냐에 따라 성능 차이가 발생한다.
Boolean 필터는 도큐먼트의 비트맵 결과를 비트 단위의 불린(Boolean) 연산으로 빠르게 실행할 수 있도록 최적화된 구현체여서 AND/OR/NOT 질의 그룹보다 빠르다.
내가 진행했던 테스트 방법은 curl과 time을 활용했고, 다음과 같다.
for i in {1..100}; do curl -s -w "%{time_namelookup} %{time_connect} %{time_appconnect} %{time_pretransfer} %{time_redirect} %{time_starttransfer} %{time_total}\n" -o /dev/null -XPOST 'http://es.google.com/_search?routing=123124&pretty' -d '
{
"size": 50,
"query": {
"bool": {
"must": [{
"term": {
"user.id": 123124
}
}, {
"term": {
"user.type": "develop"
}
}]
}
},
"from": 0
}
'
; end
for i in {1..100}; do curl -s -w "%{time_namelookup} %{time_connect} %{time_appconnect} %{time_pretransfer} %{time_redirect} %{time_starttransfer} %{time_total}\n" -o /dev/null -XPOST 'http://es.google.com/_search?routing=123124&pretty' -d '
{
"size": 50,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{ "term": { "user.id": 123124 } },
{ "term": { "user.type": "develop" } }
]
}
},
"_cache": true
}
},
"from": 0
}
' ; done
테스트해봤을 때, Boolean filter가 Boolean query보다 100ms 정도 빨랐다.
참조 :
https://www.elastic.co/guide/en/elasticsearch/guide/current/filter-caching.html
https://www.elastic.co/guide/en/elasticsearch/reference/1.4/index-modules-cache.html#filter
'Elasticsearch' 카테고리의 다른 글
[elasticsearch] python에서 간단 elasticsearch 모니터링 (0) | 2016.03.17 |
---|---|
[펌] elasticsearch의 function score 질의와 decay 적용 (0) | 2016.01.28 |
[elasticsearch] scroll, scroll timeout, scroll 관련 팁 (0) | 2015.12.07 |
[elasticsearch]HTTP content length exceeded 104857600 bytes Exception (0) | 2015.11.19 |
[elasticsearch] prefix filter 사용하기 (0) | 2015.11.19 |