Ở đây chúng ta sẽ xem cách triển khai chức năng tìm kiếm trong Laravel. chúng tôi sẽ tìm kiếm dữ liệu từ cơ sở dữ liệu và hiển thị kết quả tìm kiếm trong một bảng
Chức năng tìm kiếm trong laravel — jusLaravel. comMẫu tìm kiếm
Đầu tiên, hãy tạo một biểu mẫu cho trường tìm kiếm,
{{ csrf_field[] }}
Hành động tìm kiếmKhi nhấp vào nút tìm kiếm, nó sẽ chuyển đến tìm kiếm tuyến đường nơi có logic để tìm nạp dữ liệu từ cơ sở dữ liệu,
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
logic này tìm kiếm tên và email trong bảng Người dùng với dữ liệu đầu vào chúng tôi cung cấp, ở đây chúng tôi sử dụng toán tử LIKE để tìm kiếm dữ liệu,
sau khi tìm nạp dữ liệu, dữ liệu được gửi đến chế độ xem chào mừng .
Ở đây tất cả logic được viết trong chính file route, nếu muốn tạo controller thì cũng được, ở đây chỉ có 1 logic đơn giản thôi nên không dùng controller
Laravel Scout cung cấp một giải pháp dựa trên trình điều khiển đơn giản để thêm tìm kiếm toàn văn vào các mô hình Eloquent của bạn. Sử dụng bộ quan sát mô hình, Scout sẽ tự động giữ cho các chỉ mục tìm kiếm của bạn đồng bộ với các bản ghi Eloquent của bạn
Hiện tại, Scout có trình điều khiển Algolia, MeiliSearch và MySQL / PostgreSQL [
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
2]. Ngoài ra, Scout bao gồm trình điều khiển "bộ sưu tập" được thiết kế để sử dụng phát triển cục bộ và không yêu cầu bất kỳ phụ thuộc bên ngoài hoặc dịch vụ của bên thứ ba nào. Hơn nữa, việc viết các trình điều khiển tùy chỉnh rất đơn giản và bạn có thể tự do mở rộng Scout với các triển khai tìm kiếm của riêng mìnhCài đặt
Đầu tiên, cài đặt Scout thông qua trình quản lý gói Composer
composer require laravel/scout
Sau khi cài đặt Scout, bạn nên xuất bản tệp cấu hình Scout bằng lệnh Artisan
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
3. Lệnh này sẽ xuất bản tệp cấu hình composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
4 vào thư mục composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
5 của ứng dụng của bạnphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Cuối cùng, thêm đặc điểm
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
6 vào mô hình mà bạn muốn làm cho có thể tìm kiếm được. Đặc điểm này sẽ đăng ký một trình quan sát mô hình sẽ tự động giữ cho mô hình đồng bộ hóa với trình điều khiển tìm kiếm của bạnuse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
Điều kiện tiên quyết của trình điều khiển
Algolia
Khi sử dụng trình điều khiển Algolia, bạn nên định cấu hình thông tin đăng nhập Algolia
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
7 và composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
8 trong tệp cấu hình composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
9 của mình. Khi thông tin đăng nhập của bạn đã được định cấu hình, bạn cũng sẽ cần cài đặt Algolia PHP SDK thông qua trình quản lý gói ComposerRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
3MeiliSearch
MeiliSearch là một công cụ tìm kiếm mã nguồn mở và cực nhanh. Nếu bạn không chắc chắn cách cài đặt MeiliSearch trên máy cục bộ của mình, bạn có thể sử dụng môi trường phát triển Docker được hỗ trợ chính thức của Laravel
Khi sử dụng trình điều khiển MeiliSearch, bạn sẽ cần cài đặt MeiliSearch PHP SDK thông qua trình quản lý gói Composer
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
Sau đó, đặt biến môi trường
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
50 cũng như thông tin xác thực MeiliSearch Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
51 và Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
52 của bạn trong tệp Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
53 của ứng dụng của bạnRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
5Để biết thêm thông tin về MeiliSearch, vui lòng tham khảo tài liệu về MeiliSearch
Ngoài ra, bạn nên đảm bảo rằng bạn đã cài đặt phiên bản
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
54 tương thích với phiên bản nhị phân MeiliSearch của mình bằng cách xem lạiCảnh báo
Khi nâng cấp Scout trên ứng dụng sử dụng MeiliSearch, bạn phải luôn xem xét mọi thay đổi vi phạm bổ sung đối với chính dịch vụ MeiliSearch.
Xếp hàng
Mặc dù không bắt buộc phải sử dụng Scout, bạn nên xem xét kỹ việc định cấu hình trình điều khiển hàng đợi trước khi sử dụng thư viện. Chạy queue worker sẽ cho phép Scout xếp hàng tất cả các hoạt động đồng bộ hóa thông tin mô hình của bạn với các chỉ mục tìm kiếm, mang lại thời gian phản hồi tốt hơn nhiều cho giao diện web của ứng dụng của bạn
Khi bạn đã định cấu hình trình điều khiển hàng đợi, hãy đặt giá trị của tùy chọn
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
55 trong tệp cấu hình composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
9 của bạn thành Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
57Ngay cả khi tùy chọn
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
55 được đặt thành Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
59, điều quan trọng cần nhớ là một số trình điều khiển Scout như Algolia và Meilisearch luôn lập chỉ mục các bản ghi không đồng bộ. Có nghĩa là, mặc dù hoạt động lập chỉ mục đã hoàn thành trong ứng dụng Laravel của bạn, nhưng bản thân công cụ tìm kiếm có thể không phản ánh các bản ghi mới và cập nhật ngay lập tứcĐể chỉ định kết nối và hàng đợi mà công việc Hướng đạo của bạn sử dụng, bạn có thể xác định tùy chọn cấu hình
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
55 dưới dạng một mảngCấu hình
Định cấu hình chỉ mục mô hình
Mỗi mô hình Eloquent được đồng bộ hóa với một "chỉ mục" tìm kiếm nhất định, chứa tất cả các bản ghi có thể tìm kiếm cho mô hình đó. Nói cách khác, bạn có thể coi mỗi chỉ mục giống như một bảng MySQL. Theo mặc định, mỗi mô hình sẽ được duy trì thành một chỉ mục khớp với tên "bảng" điển hình của mô hình. Thông thường, đây là dạng số nhiều của tên mô hình;
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
7Định cấu hình dữ liệu có thể tìm kiếm
Theo mặc định, toàn bộ biểu mẫu
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
72 của một mô hình nhất định sẽ được duy trì trong chỉ mục tìm kiếm của mô hình đó. Nếu bạn muốn tùy chỉnh dữ liệu được đồng bộ hóa với chỉ mục tìm kiếm, bạn có thể ghi đè phương thức composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
73 trên mô hìnhcomposer require laravel/scout
1Một số công cụ tìm kiếm như MeiliSearch sẽ chỉ thực hiện các thao tác lọc [
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
74, composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
75, v.v. ] trên dữ liệu đúng loại. Vì vậy, khi sử dụng các công cụ tìm kiếm này và tùy chỉnh dữ liệu có thể tìm kiếm của mình, bạn nên đảm bảo rằng các giá trị số được truyền đúng loại của chúngcomposer require laravel/scout
4Định cấu hình cài đặt chỉ mục và dữ liệu có thể lọc [MeiliSearch]
Không giống như các trình điều khiển khác của Scout, MeiliSearch yêu cầu bạn xác định trước cài đặt tìm kiếm chỉ mục, chẳng hạn như thuộc tính có thể lọc, thuộc tính có thể sắp xếp và các trường cài đặt được hỗ trợ khác
Thuộc tính có thể lọc là bất kỳ thuộc tính nào bạn định lọc khi gọi phương thức
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
76 của Scout, trong khi thuộc tính có thể sắp xếp là bất kỳ thuộc tính nào bạn định sắp xếp khi gọi phương thức composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
77 của Scout. Để xác định cài đặt chỉ mục của bạn, hãy điều chỉnh phần composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
78 của mục nhập cấu hình composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
79 trong tệp cấu hình composer require laravel/scout
10 của ứng dụng của bạncomposer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
0Nếu mô hình bên dưới một chỉ mục nhất định có thể xóa mềm và được bao gồm trong mảng
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
78, Scout sẽ tự động bao gồm hỗ trợ lọc trên các mô hình đã xóa mềm trên chỉ mục đó. Nếu bạn không có thuộc tính có thể lọc hoặc có thể sắp xếp nào khác để xác định cho chỉ mục mô hình có thể xóa mềm, bạn có thể chỉ cần thêm một mục trống vào mảng composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
78 cho mô hình đóSau khi định cấu hình cài đặt chỉ mục cho ứng dụng của bạn, bạn phải gọi lệnh Artisan
composer require laravel/scout
13. Lệnh này sẽ thông báo cho MeiliSearch về cài đặt chỉ mục được định cấu hình hiện tại của bạn. Để thuận tiện, bạn có thể muốn biến lệnh này thành một phần trong quy trình triển khai của mìnhphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
0Định cấu hình ID mẫu
Theo mặc định, Scout sẽ sử dụng khóa chính của mô hình làm ID/khóa duy nhất của mô hình được lưu trữ trong chỉ mục tìm kiếm. Nếu bạn cần tùy chỉnh hành vi này, bạn có thể ghi đè các phương thức
composer require laravel/scout
14 và composer require laravel/scout
15 trên mô hìnhphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
1Định cấu hình Công cụ Tìm kiếm Theo Mô hình
Khi tìm kiếm, Scout thường sẽ sử dụng công cụ tìm kiếm mặc định được chỉ định trong tệp cấu hình
composer require laravel/scout
10 của ứng dụng của bạn. Tuy nhiên, công cụ tìm kiếm cho một mô hình cụ thể có thể được thay đổi bằng cách ghi đè phương thức composer require laravel/scout
17 trên mô hìnhphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
2Xác định người dùng
Scout cũng cho phép bạn tự động xác định người dùng khi sử dụng Algolia. Việc liên kết người dùng được xác thực với các hoạt động tìm kiếm có thể hữu ích khi xem phân tích tìm kiếm của bạn trong bảng điều khiển của Algolia. Bạn có thể kích hoạt nhận dạng người dùng bằng cách xác định biến môi trường
composer require laravel/scout
18 là Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
57 trong tệp Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
53 của ứng dụng của bạnBật tính năng này, thao tác này cũng sẽ chuyển địa chỉ IP của yêu cầu và mã định danh chính của người dùng được xác thực của bạn tới Algolia để dữ liệu này được liên kết với bất kỳ yêu cầu tìm kiếm nào do người dùng thực hiện
Cơ sở dữ liệu / Công cụ thu thập
Cơ sở dữ liệu
Cảnh báo
Công cụ cơ sở dữ liệu hiện hỗ trợ MySQL và PostgreSQL.
Nếu ứng dụng của bạn tương tác với các cơ sở dữ liệu có kích thước vừa và nhỏ hoặc có khối lượng công việc nhẹ, bạn có thể thấy thuận tiện hơn khi bắt đầu với công cụ "cơ sở dữ liệu" của Scout. Công cụ cơ sở dữ liệu sẽ sử dụng mệnh đề "where like" và chỉ mục toàn văn khi lọc kết quả từ cơ sở dữ liệu hiện tại của bạn để xác định kết quả tìm kiếm phù hợp cho truy vấn của bạn
Để sử dụng công cụ cơ sở dữ liệu, bạn có thể chỉ cần đặt giá trị của biến môi trường
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
50 thành composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
2 hoặc chỉ định trình điều khiển composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
2 trực tiếp trong tệp cấu hình composer require laravel/scout
10 của ứng dụng của bạnKhi bạn đã chỉ định công cụ cơ sở dữ liệu làm trình điều khiển ưa thích của mình, bạn phải. Sau đó, bạn có thể bắt đầu chống lại các mô hình của mình. Lập chỉ mục công cụ tìm kiếm, chẳng hạn như lập chỉ mục cần thiết để tạo chỉ mục Algolia hoặc MeiliSearch, là không cần thiết khi sử dụng công cụ cơ sở dữ liệu
Tùy chỉnh chiến lược tìm kiếm cơ sở dữ liệu
Theo mặc định, công cụ cơ sở dữ liệu sẽ thực hiện truy vấn "where like" đối với mọi thuộc tính mô hình mà bạn có. Tuy nhiên, trong một số trường hợp, điều này có thể dẫn đến hiệu suất kém. Do đó, chiến lược tìm kiếm của công cụ cơ sở dữ liệu có thể được định cấu hình sao cho một số cột được chỉ định sử dụng các truy vấn tìm kiếm toàn văn hoặc chỉ sử dụng các ràng buộc "where like" để tìm kiếm các tiền tố của chuỗi [
composer require laravel/scout
45] thay vì tìm kiếm trong toàn bộ chuỗi [composer require laravel/scout
46]Để xác định hành vi này, bạn có thể gán các thuộc tính PHP cho phương thức
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
73 của mô hình của bạn. Bất kỳ cột nào không được chỉ định hành vi chiến lược tìm kiếm bổ sung sẽ tiếp tục sử dụng chiến lược "where like" mặc địnhphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
3Cảnh báo
Trước khi chỉ định rằng một cột phải sử dụng các ràng buộc truy vấn toàn văn, hãy đảm bảo rằng cột đó đã được chỉ định một.
Công cụ thu thập
Mặc dù bạn có thể tự do sử dụng các công cụ tìm kiếm Algolia hoặc MeiliSearch trong quá trình phát triển cục bộ, nhưng bạn có thể thấy thuận tiện hơn khi bắt đầu với công cụ "bộ sưu tập". Công cụ thu thập sẽ sử dụng mệnh đề "where" và lọc bộ sưu tập trên các kết quả từ cơ sở dữ liệu hiện tại của bạn để xác định kết quả tìm kiếm phù hợp cho truy vấn của bạn. Khi sử dụng công cụ này, không cần thiết phải "lập chỉ mục" các mô hình có thể tìm kiếm của bạn, vì chúng sẽ được truy xuất đơn giản từ cơ sở dữ liệu cục bộ của bạn
Để sử dụng công cụ thu thập, bạn có thể chỉ cần đặt giá trị của biến môi trường
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
50 thành composer require laravel/scout
49 hoặc chỉ định trình điều khiển composer require laravel/scout
49 trực tiếp trong tệp cấu hình composer require laravel/scout
10 của ứng dụng của bạnKhi bạn đã chỉ định trình điều khiển bộ sưu tập làm trình điều khiển ưa thích của mình, bạn có thể bắt đầu với các mô hình của mình. Lập chỉ mục công cụ tìm kiếm, chẳng hạn như lập chỉ mục cần thiết để tạo chỉ mục Algolia hoặc MeiliSearch, là không cần thiết khi sử dụng công cụ thu thập
Sự khác biệt từ Công cụ cơ sở dữ liệu
Thoạt nhìn, công cụ "cơ sở dữ liệu" và "bộ sưu tập" khá giống nhau. Cả hai đều tương tác trực tiếp với cơ sở dữ liệu của bạn để truy xuất kết quả tìm kiếm. Tuy nhiên, công cụ thu thập không sử dụng các chỉ mục toàn văn hoặc mệnh đề
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
02 để tìm các bản ghi phù hợp. Thay vào đó, nó kéo tất cả các bản ghi có thể và sử dụng trình trợ giúp composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
03 của Laravel để xác định xem chuỗi tìm kiếm có tồn tại trong các giá trị thuộc tính mô hình hay khôngCông cụ thu thập là công cụ tìm kiếm di động nhất vì nó hoạt động trên tất cả các cơ sở dữ liệu quan hệ được hỗ trợ bởi Laravel [bao gồm cả SQLite và SQL Server];
lập chỉ mục
Nhập hàng loạt
Nếu bạn đang cài đặt Scout vào một dự án hiện có, bạn có thể đã có các bản ghi cơ sở dữ liệu mà bạn cần nhập vào các chỉ mục của mình. Scout cung cấp lệnh
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
04 Artisan mà bạn có thể sử dụng để nhập tất cả các bản ghi hiện có vào các chỉ mục tìm kiếm của mìnhphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
4Lệnh
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
05 có thể được sử dụng để xóa tất cả các bản ghi của mô hình khỏi chỉ mục tìm kiếm của bạnphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
5Sửa đổi truy vấn nhập
Nếu bạn muốn sửa đổi truy vấn được sử dụng để truy xuất tất cả các mô hình của mình để nhập hàng loạt, bạn có thể xác định phương thức
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
06 trên mô hình của mình. Đây là một nơi tuyệt vời để thêm bất kỳ tải mối quan hệ mong muốn nào có thể cần thiết trước khi nhập mô hình của bạnphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
6Thêm bản ghi
Khi bạn đã thêm đặc điểm
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
6 vào một mô hình, tất cả những gì bạn cần làm là composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
08 hoặc composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
09 một phiên bản mô hình và nó sẽ tự động được thêm vào chỉ mục tìm kiếm của bạn. Nếu bạn đã định cấu hình Hướng đạo thì thao tác này sẽ được nhân viên xếp hàng của bạn thực hiện ở chế độ nềnThêm bản ghi qua truy vấn
Nếu bạn muốn thêm một tập hợp các mô hình vào chỉ mục tìm kiếm của mình thông qua truy vấn Eloquent, bạn có thể xâu chuỗi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 vào truy vấn Eloquent. Phương thức php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 sẽ truy vấn và thêm các bản ghi vào chỉ mục tìm kiếm của bạn. Một lần nữa, nếu bạn đã định cấu hình Scout để sử dụng hàng đợi, tất cả các khối sẽ được nhân viên xếp hàng của bạn nhập trong nềnphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
7Bạn cũng có thể gọi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 trên một Eloquent relationship instancephp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
8Hoặc, nếu bạn đã có một bộ sưu tập các mô hình Eloquent trong bộ nhớ, bạn có thể gọi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 trên cá thể bộ sưu tập để thêm các cá thể mô hình vào chỉ mục tương ứng của chúngLưu ý
Phương thức00 có thể được coi là thao tác "nâng cao". Nói cách khác, nếu bản ghi mô hình đã có trong chỉ mục của bạn, nó sẽ được cập nhật. Nếu nó không tồn tại trong chỉ mục tìm kiếm, nó sẽ được thêm vào chỉ mục.
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Cập nhật hồ sơ
Để cập nhật một mô hình có thể tìm kiếm, bạn chỉ cần cập nhật các thuộc tính của phiên bản mô hình và đưa mô hình vào cơ sở dữ liệu của bạn. Scout sẽ tự động duy trì các thay đổi đối với chỉ mục tìm kiếm của bạn
Bạn cũng có thể gọi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 trên một phiên bản truy vấn Eloquent để cập nhật bộ sưu tập các mô hình. Nếu các mô hình không tồn tại trong chỉ mục tìm kiếm của bạn, chúng sẽ được tạophp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
7Nếu bạn muốn cập nhật các bản ghi chỉ mục tìm kiếm cho tất cả các mô hình trong một mối quan hệ, bạn có thể gọi
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 trên ví dụ về mối quan hệphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
8Hoặc, nếu bạn đã có một bộ sưu tập các mô hình Eloquent trong bộ nhớ, bạn có thể gọi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 trên cá thể bộ sưu tập để cập nhật các cá thể mô hình trong chỉ mục tương ứng của chúngXóa bản ghi
Để xóa một bản ghi khỏi chỉ mục của bạn, bạn có thể chỉ cần
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
09 mô hình khỏi cơ sở dữ liệu. Điều này có thể được thực hiện ngay cả khi bạn đang sử dụng các mô hìnhNếu bạn không muốn truy xuất mô hình trước khi xóa bản ghi, bạn có thể sử dụng phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
10 trên phiên bản truy vấn Eloquentuse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
1Nếu bạn muốn xóa các bản ghi chỉ mục tìm kiếm cho tất cả các mô hình trong một mối quan hệ, bạn có thể gọi
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
10 trên ví dụ về mối quan hệuse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
2Hoặc, nếu bạn đã có một bộ sưu tập các mô hình Eloquent trong bộ nhớ, bạn có thể gọi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
10 trên cá thể bộ sưu tập để xóa các cá thể mô hình khỏi chỉ mục tương ứng của chúngTạm dừng lập chỉ mục
Đôi khi, bạn có thể cần thực hiện một loạt thao tác Eloquent trên một mô hình mà không đồng bộ hóa dữ liệu mô hình với chỉ mục tìm kiếm của bạn. Bạn có thể làm điều này bằng cách sử dụng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
13. Phương thức này chấp nhận một lần đóng sẽ được thực thi ngay lập tức. Mọi hoạt động của mô hình xảy ra trong quá trình đóng sẽ không được đồng bộ hóa với chỉ mục của mô hìnhuse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
3Phiên bản mô hình có thể tìm kiếm có điều kiện
Đôi khi, bạn có thể chỉ cần làm cho một mô hình có thể tìm kiếm được trong một số điều kiện nhất định. Ví dụ: hãy tưởng tượng bạn có mô hình
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
14 có thể ở một trong hai trạng thái. "dự thảo" và "xuất bản". Bạn có thể chỉ muốn cho phép các bài đăng "đã xuất bản" có thể tìm kiếm được. Để thực hiện điều này, bạn có thể xác định một phương pháp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
15 trên mô hình của mìnhuse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
4Phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
15 chỉ được áp dụng khi thao tác với các mô hình thông qua các phương thức, truy vấn hoặc mối quan hệ của composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
08 và composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
09. Trực tiếp làm cho các mô hình hoặc bộ sưu tập có thể tìm kiếm được bằng phương pháp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
00 sẽ ghi đè kết quả của phương pháp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
15Cảnh báo
Phương pháp15 không áp dụng được khi sử dụng công cụ "cơ sở dữ liệu" của Scout vì tất cả dữ liệu có thể tìm kiếm luôn được lưu trữ trong cơ sở dữ liệu. Để đạt được hành vi tương tự khi sử dụng công cụ cơ sở dữ liệu, thay vào đó, bạn nên sử dụng.
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Đang tìm kiếm
Bạn có thể bắt đầu tìm kiếm một mô hình bằng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
22. Phương thức tìm kiếm chấp nhận một chuỗi duy nhất sẽ được sử dụng để tìm kiếm các mô hình của bạn. Sau đó, bạn nên xâu chuỗi phương thức php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
23 vào truy vấn tìm kiếm để truy xuất các mô hình Eloquent phù hợp với truy vấn tìm kiếm đã chouse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
5Vì các tìm kiếm Scout trả về một tập hợp các mô hình Eloquent, bạn thậm chí có thể trả lại kết quả trực tiếp từ một tuyến hoặc bộ điều khiển và chúng sẽ tự động được chuyển đổi thành JSON
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
6Nếu bạn muốn nhận kết quả tìm kiếm thô trước khi chúng được chuyển đổi sang mô hình Eloquent, bạn có thể sử dụng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
24use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
7Chỉ mục tùy chỉnh
Các truy vấn tìm kiếm thường sẽ được thực hiện trên chỉ mục được chỉ định bởi phương thức của mô hình. Tuy nhiên, bạn có thể sử dụng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
26 để chỉ định một chỉ mục tùy chỉnh sẽ được tìm kiếm thay thếuse Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
8mệnh đề ở đâu
Scout cho phép bạn thêm mệnh đề "ở đâu" đơn giản vào truy vấn tìm kiếm của mình. Hiện tại, các mệnh đề này chỉ hỗ trợ kiểm tra tính bằng số cơ bản và chủ yếu hữu ích cho việc xác định phạm vi truy vấn tìm kiếm theo ID chủ sở hữu
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
9Bạn có thể sử dụng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
27 để hạn chế kết quả đối với một tập hợp giá trị nhất địnhRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
30Vì chỉ mục tìm kiếm không phải là cơ sở dữ liệu quan hệ nên các mệnh đề "where" nâng cao hơn hiện không được hỗ trợ
Cảnh báo Nếu ứng dụng của bạn đang sử dụng MeiliSearch, bạn phải định cấu hình ứng dụng của mình trước khi sử dụng mệnh đề "where" của Scout
phân trang
Ngoài việc truy xuất một bộ sưu tập các mô hình, bạn có thể phân trang kết quả tìm kiếm của mình bằng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
28. Phương thức này sẽ trả về một phiên bản php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
29 giống như khi bạn đã đánh số trang cho một truy vấn Eloquent truyền thốngRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
31Bạn có thể chỉ định số lượng mô hình cần truy xuất trên mỗi trang bằng cách chuyển số lượng làm đối số đầu tiên cho phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
28Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
32Khi bạn đã truy xuất kết quả, bạn có thể hiển thị kết quả và hiển thị các liên kết trang bằng Blade giống như khi bạn đã phân trang một truy vấn Eloquent truyền thống
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
33Tất nhiên, nếu bạn muốn truy xuất kết quả phân trang dưới dạng JSON, bạn có thể trả về phiên bản trình phân trang trực tiếp từ một tuyến đường hoặc bộ điều khiển
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
34Cảnh báo
Vì các công cụ tìm kiếm không biết các định nghĩa phạm vi toàn cục của mô hình Eloquent của bạn, nên bạn không nên sử dụng phạm vi toàn cục trong các ứng dụng sử dụng phân trang Scout. Hoặc, bạn nên tạo lại các ràng buộc của phạm vi toàn cầu khi tìm kiếm qua Scout.
Xóa mềm
Nếu các mô hình được lập chỉ mục của bạn là và bạn cần tìm kiếm các mô hình đã xóa mềm của mình, hãy đặt tùy chọn
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
31 của tệp cấu hình composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
9 thành Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
57Khi tùy chọn cấu hình này là
Route::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
57, Scout sẽ không xóa các mô hình đã xóa mềm khỏi chỉ mục tìm kiếm. Thay vào đó, nó sẽ đặt thuộc tính php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
35 ẩn trên bản ghi được lập chỉ mục. Sau đó, bạn có thể sử dụng các phương pháp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
36 hoặc php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
37 để truy xuất các bản ghi mềm đã bị xóa khi tìm kiếmRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
35Lưu ý
Khi mô hình đã xóa mềm bị xóa vĩnh viễn bằng cách sử dụng38, Scout sẽ tự động xóa mô hình đó khỏi chỉ mục tìm kiếm.
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Tùy chỉnh Tìm kiếm Công cụ
Nếu bạn cần thực hiện tùy chỉnh nâng cao hành vi tìm kiếm của một công cụ, bạn có thể chuyển một bao đóng làm đối số thứ hai cho phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
22. Ví dụ: bạn có thể sử dụng lệnh gọi lại này để thêm dữ liệu vị trí địa lý vào tùy chọn tìm kiếm của mình trước khi truy vấn tìm kiếm được chuyển đến AlgoliaRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
36Tùy chỉnh truy vấn kết quả Eloquent
Sau khi Scout truy xuất danh sách các mô hình Eloquent phù hợp từ công cụ tìm kiếm của ứng dụng của bạn, Eloquent được sử dụng để truy xuất tất cả các mô hình phù hợp bằng các khóa chính của chúng. Bạn có thể tùy chỉnh truy vấn này bằng cách gọi phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
40. Phương thức php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
40 chấp nhận một bao đóng sẽ nhận phiên bản trình tạo truy vấn Eloquent làm đối sốRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
37Vì cuộc gọi lại này được gọi sau khi các mô hình có liên quan đã được truy xuất từ công cụ tìm kiếm của ứng dụng của bạn, nên không nên sử dụng phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
40 để "lọc" kết quả. Thay vào đó, bạn nên sử dụngCông cụ tùy chỉnh
Viết động cơ
Nếu một trong những công cụ tìm kiếm Scout tích hợp không phù hợp với nhu cầu của bạn, bạn có thể viết công cụ tùy chỉnh của riêng mình và đăng ký nó với Scout. Công cụ của bạn nên mở rộng lớp trừu tượng
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
43. Lớp trừu tượng này chứa tám phương thức mà công cụ tùy chỉnh của bạn phải triển khaiRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
38Bạn có thể thấy hữu ích khi xem lại việc triển khai các phương thức này trên lớp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
44. Lớp học này sẽ cung cấp cho bạn một điểm khởi đầu tốt để học cách triển khai từng phương thức này trong công cụ của riêng bạnĐăng ký động cơ
Khi bạn đã viết công cụ tùy chỉnh của mình, bạn có thể đăng ký nó với Scout bằng phương pháp
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
45 của trình quản lý công cụ Scout. Trình quản lý động cơ của Scout có thể được giải quyết từ vùng chứa dịch vụ của Laravel. Bạn nên gọi phương thức php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
45 từ phương thức php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
47 của lớp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
48 của bạn hoặc bất kỳ nhà cung cấp dịch vụ nào khác được ứng dụng của bạn sử dụngRoute::any['/search',function[]{
$q = Input::get [ 'q' ];
$user = User::where['name','LIKE','%'.$q.'%']->orWhere['email','LIKE','%'.$q.'%']->get[];
if[count[$user] > 0]
return view['welcome']->withDetails[$user]->withQuery [ $q ];
else return view ['welcome']->withMessage['No Details found. Try to search again !'];
}];
39Sau khi động cơ của bạn đã được đăng ký, bạn có thể chỉ định nó làm Scout
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
49 mặc định trong tệp cấu hình composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
9 của ứng dụng của bạnMacro trình tạo
Nếu bạn muốn định nghĩa một phương thức xây dựng tìm kiếm Scout tùy chỉnh, bạn có thể sử dụng phương thức
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
51 trên lớp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
52. Thông thường, "macro" phải được xác định trong phương pháp php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
47 của nhà cung cấp dịch vụcomposer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
0Hàm
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
51 chấp nhận tên macro làm đối số đầu tiên và đóng làm đối số thứ hai. Việc đóng macro sẽ được thực thi khi gọi tên macro từ triển khai php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
52