[Executing Filters]

섹션에서 document score (검색 결과의 _score 필드) 대해서는 자세히 다루지 않고 넘어 갔었다. Score 우리가 검색하고자 query document 얼마나 match하는지를 측정한 숫자 값이다. Score 높을수록 적합한 document이고, Score 낮을수록 적합한 document이다.


Elasticsearch 모든 query 적합성 score (점수) 계산을 수행한다. 적합성 점수 (relevance score) 불필요한 경우에 Elasticsearch query-dsl-filter, filter 형태의 다른 기능을 제공한다. Filter 2가지 중요한 이유 때문에, 개념적으로 query 빠르게 수행하도록 최적화 하는 것과 같다.

  • Filter score 계산을 하지 않기 때문에 query보다 빠르다.
  • Filter 반복되는 검색 결과를 memory cache할 수 있기 때문에 query보다 빠르다.

Filter 이해하기 위해서는, query filter 조합한 filtered Query (http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html) 대해서 먼저 아는 것이 좋다.


예를 들어, range filter 소개하자면, 값의 range 따라 document filter 있다. 일반적으로 숫자나 날짜별로 filter 적용하여 사용한다.


다음 예제는 20000 30000 사이의 balance 가지는 모든 account 리턴하는 filtered query 사용한 것이다. 다른 말로 하자면, 20000 이상 30000 이하의 balance 가진 account 찾고 싶은 것이다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
   "filtered": {
     "query": { "match_all": {} },
     "filter": {
       "range": {
         "balance": {
           "gte": 20000,
           "lte": 30000
         }
       }
     }
   }
  }
}'


내용을 분석해 보면, filtered query query part match_all query filter part range filter 포함하고 있다. 다른 query query part 대체할 있고, 다른 filter filter part 대체할 있다. 위의 경우에 range filter 모든 document들이 range안에 동일하게 들어오기 때문에 완벽하다. , 모든 document 동일하다.


일반적으로 어떤 filter query 원하는지 결정하는 가장 쉬운 방법은 relevance score (적합성 점수) 신경 쓰는지 스스로에게 물어보는 것이다. Relevance score (적합성 점수) 중요하지 않다면 filter 사용하고, 중요하다면 query 사용하라. SQL 배경지식이 있다면, query filter SELECT WHERE 개념과 유사하다. 비록 filter query보다 조금 유사하지만.


게다가, match_all, match, bool, filtered, range query 이외에도 다른 많은 이용할 있는 query/filter들이 있다. 여기서는 깊이 다루지 않을 것이다. 어떻게 동작하는지에 대한 기본적인 이해를 하고 있기 때문에, 다른 query/filter 배우고 시험하면서 이런 지식을 활용하는데 어렵지는 않을 것이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/703

트랙백 주소 :: http://www.yongbi.net/trackback/703

트랙백 RSS :: http://www.yongbi.net/rss/trackback/703

댓글을 달아 주세요

댓글 RSS 주소 : http://www.yongbi.net/rss/comment/703
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다