2012-03-13 32 views
5

A có một chuỗi, chúng ta hãy nói "Ab Cd"Làm thế nào để tìm kiếm trong nhiều lĩnh vực với OR tuyên bố trong ElasticSearch

tôi có giấy tờ với các lĩnh vực: [ 'a', 'b', 'c', ' d ', ...' z '] (không phải tất cả tài liệu đều có tất cả các trường)

Tôi muốn tìm kiếm chỉ trong các trường' a ',' c ',' f ',' x 'nhưng tôi muốn trả về tất cả các trường trong tài liệu.

Lần truy cập thành công nếu BẤT CỨ trường 'a', 'c', 'f', 'x' chứa chuỗi bắt đầu 'Ab' hoặc 'Cd'.

Bây giờ tôi sử dụng điều này nhưng nó tìm kiếm trong TẤT CẢ các trường không nằm trong các trường được chọn.

{'query': {'query_string': {'query': "Ab* Cd*"}}} 

Trả lời

14

Có thể để xác định danh sách các lĩnh vực mà bạn muốn tìm kiếm theo mặc định như một phần của truy vấn:

{ 
    "query": { 
     "query_string" : { 
      "fields" : ["a", "c", "f", "x"], 
      "query" : "Ab* Cd*" 
     } 
    } 
} 

Ngoài ra, bạn có thể thêm tiền tố mỗi hạn với tên của sân:

{'query': {'query_string': {'query': "a:Ab* c:Ab* f:Ab* x:Ab* a:Cd* c:Cd* f:Cd* x:Cd*"}}} 

Kiểm tra Query String Query trang của elasticsearch Hướng dẫn mô tả các tùy chọn này và các tùy chọn hữu ích khác.

+0

Cảm ơn, điều này giải quyết được vấn đề. –

4

Đây chính xác là những gì tôi đang tìm kiếm. Trong trường hợp bất kỳ ai tìm kiếm phiên bản java này:

QueryStringQueryBuilder qsqb = new QueryStringQueryBuilder("Ab* Cd*") 
      .field("a", 2) 
      .field("b") 
      .field("c") 
      .field("f") 
      .field("x"); 

Bạn thậm chí có thể sử dụng tăng cấp trường nếu bạn muốn hiển thị cho trường "a" ở mã trên.

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