2011-12-19 6 views
6

Elasticsearch를 처음 사용했습니다. 나는 쿼리와 필터의 개념을 완전히 이해하고 있다고 생각하지 않는다. 필자의 경우 필자는 득점과 같은 고급 기능을 사용하고 싶지 않기 때문에 필터 만 사용하려고합니다.SQL 문의 Elasticsearch DSL 쿼리

다음 SQL 문을 elasticsearch 쿼리로 변환하려면 어떻게해야합니까?

SELECT * FROM advertiser 
WHERE company like '%com%' 
AND sales_rep IN (1,2) 

내가 지금까지 가지고 :

curl -XGET 'localhost:9200/advertisers/advertiser/_search?pretty=true' -d ' 
{ 
    "query" : { 
     "bool" : { 
      "must" : { 
       "wildcard" : { "company" : "*com*" } 
      } 
     } 
    }, 
    "size":1000000 

}' 

가 어떻게 sales_rep 필드에서 OR 필터를 추가?

감사합니다.

답변

2

must 절 뒤에 "should"절을 추가하십시오. bool 쿼리에서 하나 이상의 should 절이 기본적으로 일치해야합니다. 실제로 "minimum_number_should_match"를 임의의 숫자로 설정할 수 있습니다. bool query docs을 확인하십시오.

귀하의 경우이 방법이 효과적입니다.

"should" : [ 
     { 
      "term" : { "sales_rep_id" : "1" } 
     }, 
     { 
      "term" : { "sales_rep_id" : "2" } 
     } 
    ], 

동일한 개념이 bool 필터에도 적용됩니다. "query"를 "filter"로 변경하십시오. bool 필터 문서는 here입니다.

0

나는 ... 아마 다음과 같은 코드가 유용 할 수있다, 어쨌든 ... 사년 너무 늦게이 게시물에 걸쳐

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "company": "*com*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "sales_rep_id": [ "1", "2" ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}