2014-11-26 15 views
9

Nếu tôi có một văn bản như thế này:Có cách nào không trả lại mảng khi chỉ định các trường trả về trong truy vấn Elasticsearch không?

[ 
    { 
     "model": "iPhone", 
     "brand": "Apple" 
    }, 
    { 
     "model": "Nexus 5", 
     "brand": "Google" 
    } 
] 

Và đó tôi thực hiện một truy vấn mà chỉ trả về lĩnh vực model trong một truy vấn, như thế này:

{ 
    "fields": ["model"], 
    "query": { 
     "term": { 
      "brand": "apple" 
     } 
    } 
} 

Sau đó, từng lĩnh vực tài liệu được trả lại trong vòng một mảng như thế này:

{ "model": ["iPhone"] } 

thay vì

{ "model": "iPhone" } 

Làm cách nào để tránh điều đó và nhận các trường có định dạng giống như khi tùy chọn truy vấn fields không được xác định?

Trả lời

18

Cuối cùng câu trả lời là khá dễ dàng: bạn phải sử dụng tùy chọn truy vấn _source insteand của fields.

Ví dụ:

{ 
    "_source": ["model"], 
    "query": { 
     "term": { 
      "brand": "apple" 
     } 
    } 
} 

Bằng cách này tôi nhận được tài liệu theo định dạng sau, giống như trong một bản gốc (không có tùy chọn _source):

{ "model": "iPhone" } 
+0

10 upvotes nếu tôi có thể – tyler

+0

@tyler Haha, tôi rất vui vì nó đã giúp bạn! –

+1

Không, bạn xứng đáng không có upvotes, bởi vì câu trả lời của bạn là gây hiểu nhầm - sử dụng tham số Fields hiệu quả hơn rất nhiều so với sử dụng _souce (nó tiết kiệm đĩa IO và CPU vì nó không phải phân tích cú pháp _source). Tôi thực sự muốn biết cách trả về các trường tài liệu bằng cách sử dụng Định nghĩa trường theo cùng định dạng mà chúng được cung cấp khi lập chỉ mục. Nó có thể tiết kiệm cho tôi một sự lặp lại toàn bộ (có thể là quá nhiều tài liệu) chỉ để loại bỏ các mảng đó ... –

0

tôi đã cùng một vấn đề, và thực sự (như Wax Cage nói) Tôi nghĩ rằng _source sẽ mang lại một số vấn đề về biểu diễn. Tôi nghĩ rằng sử dụng cả hai fields_source giải quyết vấn đề:

const fields = ['model'] 

{ 
    fields: fields, 
    _source: fields 
    query: { 
    term: { 
     brand: 'apple' 
    } 
    } 
} 
+0

Bạn có chắc chắn không? Điều đó không chỉ bị hạn chế của cả hai giải pháp? Câu trả lời của bạn lớn hơn, bởi vì bạn có cả hai trường và nguồn phản hồi. Và sau đó phân tích cú pháp của tất cả các nguồn tài liệu có liên quan xảy ra anyway ... –

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