[Elasticsearch] filter 조회가 query 조회보다 빠르다.

서버|2017. 12. 11. 17:22

쿼리 조회 시 두 가지 방법이 있다.

query

filter


filter 조회가 query 조회보다 빠르다.

이유는 score 계산을 하지 않고, 검색 결과를 캐쉬하기 때문이다.


score 란?

elasticsearch

elasticsearch aaa

elasticsearch abbb

위와 같은 데이터가 있을 때 elasticsearch 문자를 검색하면 첫 번째 document 의 score가 높게 나온다. 이유는 문자가 정확하게 매칭되기 때문이다. 즉, score의 값은 문자열의 유사성에 따라 다르게 출력된다.

출처 : Elasticsearch in Action 도서


다음은 filter 검색에 대한 요청 결과이다.

결과의 json 데이터를 보면 _score 값이 1로 찍힌 것을 확인할 수 있다.

이처럼 filter 검색은 score 계산을 하지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
curl -XGET 'http://localhost:9200/get-together/_search?pretty' -d '{
    "query": {
        "filtered": {
            "filter": {
                "term": {
                    "name": "clojure"
                }
            }            
        }
    }
}'
 
 
{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "get-together",
      "_type" : "new-events",
      "_id" : "1",
      "_score" : 1.0,
      "_source" : {
        "name" : "Late Night with Elasticsearch",
        "name2" : "lng1982 Test",
        "name3" : "my name is namkyu Lee",
        "date" : "2013-10-25T19:00"
      }
    } ]
  }
}
cs


다음은 query 검색에 대한 요청 결과이다.

filter 검색과는 다르게 _score 값이 0.15342641 이 나온 것을 확인 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
curl -XGET 'http://localhost:9200/get-together/_search?pretty' -d '{
    "query": {
        "term": {
            "name": "elasticsearch"
        }
    }
}'
 
 
{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.15342641,
    "hits" : [ {
      "_index" : "get-together",
      "_type" : "new-events",
      "_id" : "1",
      "_score" : 0.15342641,
      "_source" : {
        "name" : "Late Night with Elasticsearch",
        "name2" : "lng1982 Test",
        "name3" : "my name is namkyu Lee",
        "date" : "2013-10-25T19:00"
      }
    } ]
  }
}
cs


댓글()