2014-06-05 16 views
9

Tôi đang bận kiểm tra elasticsearch cho một dự án mới mà tôi đang bắt đầu. Tôi hiện đang chạy Symfony2.5, với FOSElasticaBundle mới nhất và tất cả những điều đó. Tôi đang làm một số tiêu chuẩn về hiệu suất của gói (tôi biết đàn hồi trong chính nó là khá darn nhanh), nhưng tôi đã đi qua một vấn đề nhỏ mà thực sự có thể dễ dàng để giải quyết, nếu chỉ tài liệu của gói được tiết hơn.FOSElasticaBundle và Doctrine Hydration

Câu hỏi thực tế của tôi đơn giản chỉ là cách thay vì trả về một mảng các đối tượng Doctrine (mà tôi tin là được điền thông qua truy vấn DB), để trả về mảng "thô" của phản hồi từ bản thân Elastica? Bao gồm thời gian phản hồi, điểm tối đa, v.v. Các tài liệu cho FOSElasticaBundle khá mơ hồ về các chủ đề này ...

Có vẻ như một chút phản tác dụng và chậm phải truy vấn lại cơ sở dữ liệu khi bạn đã có tất cả thông tin bạn đang tìm kiếm từ đàn hồi? Hoặc có điều gì đó rất rõ ràng rằng tôi đang thiếu ở đây?

Cảm ơn bạn đã trợ giúp!

Trả lời

15

Tìm thấy câu trả lời ... Một chút giấc ngủ có thể khiến người đó có vẻ dài.

Nếu bất kỳ ai khác đang cố gắng tìm ra điều này, sau khi trải qua toàn bộ điều hydrate: false và những gì không (mà không liên quan đến câu hỏi này theo bất kỳ cách nào, nhân tiện).

Đơn giản chỉ cần sử dụng dịch vụ:

$this->get('fos_elastica.index.app.foo')->search($query) để có được những ví dụ Elastica Loại.

$this->get('fos_elastica.finder.app.foo')->find($query) nhận một mảng các thực thể Doctrine.

Hy vọng điều này sẽ giúp ai đó.

+0

Bạn đã tìm ra liệu có thể bằng cách nào đó truy xuất lại kết quả JSON trong kho lưu trữ FOSElastica tùy chỉnh không? – Zap

+0

@Zap, elastica chỉ cần trả lại một mảng giá trị, bao gồm tổng số lần truy cập, thời gian, v.v. Hầu hết những thứ bạn nhận được khi chạy các truy vấn curl thẳng. Nếu bạn thực sự muốn, bạn luôn có thể chỉ sử dụng json_encode trên giá trị trả lại, nhưng tôi không thể thực sự thấy lý do tại sao bạn muốn điều đó. – iLikeBreakfast

+3

@iLikeBreakfast thực sự có thể sử dụng dịch vụ chỉ mục. Nhưng điều này có nghĩa là bạn sẽ không thể sử dụng tính năng phân trang, được thực hiện trong công cụ tìm. Chúng tôi đã giải quyết vấn đề này bằng cách tạo dịch vụ tìm kiếm của riêng chúng tôi. Khi instantiating nó, chúng tôi chèn riêng của chúng tôi elasticaToModel biến áp. Biến áp này chỉ là một sự thực hiện của ORM ElasticaToModelTransformer nhưng chúng ta đã thêm một setter phụ để vô hiệu hóa hydrat hóa bằng cách sử dụng các đối tượng Doctrine. Thay vào đó chúng ta chỉ trả về một mảng dữ liệu từ các đối tượng kết quả của Elastica. – Jasperdc