2015-02-06 15 views
6

Làm cách nào để có được truy vấn SQL đơn giản này chạy trên elasticsearch?elasticsearch phù hợp với hai trường

SELECT * FROM [MyType] WHERE a = -23,4807339 VÀ b = -46,60068

Tôi đang thực sự gặp rắc rối với nó cú pháp, các truy vấn đa trận đấu không làm việc trong trường hợp của tôi, tôi nên sử dụng loại truy vấn nào?

Trả lời

5

Đối với các truy vấn giống như của bạn bool bộ lọc được ưu tiên hơn and bộ lọc. Xem here toàn bộ câu chuyện về đề xuất này và tại sao được xem là hiệu quả hơn.

Những đang được nói, tôi sẽ chọn để làm điều đó như thế này:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      {"term": {"a": -23.4807339}}, 
      {"term": {"b": -46.60068}} 
      ] 
     } 
     } 
    } 
    } 
} 
1

Bạn có thể tiếp cận điều này với bộ lọc and. Ví dụ: ví dụ:

{ 
    "size": 100, 
    "query" : {"filtered" : { 
    "query" : {"match_all" : {}}, 
    "filter" : {"and" : [ 
     "term" : {"a": -23.4807339}, 
     "term" : {"b": -46.60068} 
    ]} 
    }} 
} 

Đảm bảo chỉ đạo truy vấn đối với chỉ mục và loại chính xác. Lưu ý rằng tôi đã chỉ định kích thước của bộ trả về là 100 tùy ý - bạn phải chỉ định một giá trị phù hợp với trường hợp sử dụng của mình.

Có nhiều hơn trên truy vấn được lọc here và hơn thế nữa trên bộ lọc andhere.

+0

Cảm ơn! nó đã làm việc! Điều gì sẽ xảy ra nếu tôi muốn nó trả về tất cả các giá trị, có cách nào để thực hiện điều đó mà không cần sử dụng nhiều truy vấn không? –

+0

@ ViníciusMariano Nếu bạn định trả lại số lượng lớn tài liệu, đặt cược tốt nhất của bạn có lẽ là xem xét chức năng 'scroll' (có một số điểm giống với con trỏ trong các công nghệ cơ sở dữ liệu khác). Tài liệu toàn diện hơn có tại đây: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-scroll.html – rchang

Các vấn đề liên quan