2011-12-19 55 views
6

Tôi mới sử dụng Elasticsearch. Tôi không nghĩ rằng tôi hoàn toàn hiểu khái niệm về truy vấn và bộ lọc. Trong trường hợp của tôi, tôi chỉ muốn sử dụng bộ lọc vì tôi không muốn sử dụng tính năng nâng cao như tính điểm.Truy vấn DSL Elasticsearch từ câu lệnh SQL

Làm cách nào để chuyển đổi câu lệnh SQL sau thành truy vấn elasticsearch?

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

Những gì tôi có cho đến nay:

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

}' 

Làm thế nào để tôi thêm OR bộ lọc trên sân sales_rep?

Cảm ơn

Trả lời

2

Thêm một "nên" khoản sau khi khoản phải của bạn. Trong truy vấn bool, một hoặc nhiều mệnh đề phải phù hợp theo mặc định. Trên thực tế, bạn có thể đặt "minimum_number_should_match" thành bất kỳ số nào, hãy xem bool query docs.

Đối với trường hợp của bạn, thao tác này sẽ hoạt động.

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

Khái niệm tương tự cũng hoạt động đối với bộ lọc bool. Chỉ cần thay đổi "truy vấn" thành "bộ lọc". Tài liệu bộ lọc bool là here.

0

tôi đi qua bài này 4 năm quá muộn ...

Anyways, có lẽ đoạn mã sau có thể hữu ích ...

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "company": "*com*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "sales_rep_id": [ "1", "2" ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
Các vấn đề liên quan