2011-11-15 36 views
27

OK, tôi đã không thể tìm ra điều này cho đến nay. Hy vọng ai đó có thể cung cấp một số cái nhìn sâu sắc.Cách tìm kiếm các đối tượng lồng nhau với tìm kiếm đàn hồi

Đưa ra các tài liệu bên dưới, làm cách nào tôi tìm kiếm tất cả các tài liệu có video có "kiểm tra" trong tiêu đề video? Tôi đang sử dụng API HTTP. (Về cơ bản, làm thế nào để bạn tìm kiếm đối tượng lồng nhau với tìm kiếm đàn hồi? Tôi biết đó có phải là tài liệu trên mạng, nhưng tôi đã không thực sự có thể tìm thấy bất kỳ.)

[{ 
    id:4635, 
    description:"This is a test description", 
    author:"John", 
    author_id:51421, 
    video: { 
     title:"This is a test title for a video", 
     description:"This is my video description", 
     url:"/url_of_video" 
    } 
}, 
{ 
    id:4636, 
    description:"This is a test description 2", 
    author:"John", 
    author_id:51421, 
    video: { 
     title:"This is an example title for a video", 
     description:"This is my video description2", 
     url:"/url_of_video2" 
    } 
}, 
{ 
    id:4637, 
    description:"This is a test description3", 
    author:"John", 
    author_id:51421, 
    video: { 
     title:"This is a test title for a video3", 
     description:"This is my video description3", 
     url:"/url_of_video3" 
    } 
}] 

Trả lời

24

OK, RTFM! Cuối cùng tôi đã tìm thấy các trang này (nên đã dành nhiều thời gian hơn với tài liệu trước) và có vẻ như chúng tôi đã đặt thuộc tính chứa video để nhập: lồng nhau, sau đó sử dụng truy vấn lồng nhau.

http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html

http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html

Hy vọng điều này sẽ giúp người xuống đường.

+1

Bạn không nhất thiết phải lồng vide. Xem http://www.elasticsearch.org/blog/2010/02/12/yourdatayoursearch.html và câu trả lời của tôi bên dưới. – dira

+0

Đây là liên kết được cập nhật: http://www.elasticsearch.org/blog/your-data-your-search/ – swatkins

+1

Tôi thấy bài đăng trên blog này thực sự hữu ích: http://www.elasticsearch.org/blog/managing -relations-inside-elasticsearch/ – Quin

42

Bạn không nhất thiết phải lồng ghép video; bạn có thể ánh xạ nó như một trường bình thường. Có nghĩa là nó sẽ lưu trữ

'video:title': "This is a test title for a video3", 
'video:description':"This is my video description3", 
'video:url':"/url_of_video3" 

Và bạn có thể tìm kiếm video.title:'test'.

Theo tôi nhận được, các trường lồng nhau rất hữu ích khi bạn có nhiều mục lồng nhau và bạn chỉ muốn thực hiện truy vấn cho các mục lồng nhau. Ví dụ, có dữ liệu này

[{ 
    id:4635, 
    description:"This is a test description", 
    author:"John", 
    author_id:51421, 
    video: [ 
     { 
     title:"This is a test title for a video", 
     description:"This is my video description", 
     url:"/url_of_video" 
     }, 
     { 
     title:"This is an example title for a video", 
     description:"This is my video description2", 
     url:"/url_of_video2" 
     } 
    ] 
}, 
{ 
    id:4637, 
    description:"This is a test description3", 
    author:"John", 
    author_id:51421, 
    video: [ 
     { 
     title:"This is a test title for a video3", 
     description:"This is my video description3", 
     url:"/url_of_video3" 
     } 
    ] 
}] 

Nếu bạn muốn tìm kiếm video.title: 'test' and video.description: 'description2' và video không được lồng nhau, nó sẽ cung cấp cho bạn một kết quả giả (vì test là trong đoạn video đầu tiên và description2 trong lần thứ hai, nhưng trong tất cả trường video bạn có cả hai). Trong trường hợp này, nếu bạn ánh xạ video dưới dạng lồng nhau, video sẽ ghi nhớ từng video là một thực thể riêng biệt và sẽ tìm kiếm từng video phù hợp với các điều kiện đó, vì vậy, đối với video.title: 'test' and video.description: 'description2' nó sẽ không trả lại, cho video.title: 'example' and video.description: 'description2' nó sẽ trả lại một kết quả .

+6

Câu trả lời này cung cấp một sự phân biệt quan trọng giữa việc lồng và lưu trữ một mảng hoặc đối tượng phụ. Làm tổ tạo thêm tài liệu trong chỉ mục của một người và làm phức tạp những thứ không cần thiết trong trường hợp @swatkins. –

+0

Điều gì về một trường có danh sách các chuỗi? làm cách nào để chỉ lấy các phần tử của danh sách và các tài liệu có ít nhất một kết quả phù hợp trong danh sách trường đó? –

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