Meilisearch-laravel-scout: Lewati pencarian berdasarkan ID

Dibuat pada 6 Apr 2021  ·  5Komentar  ·  Sumber: meilisearch/meilisearch-laravel-scout

Halo,

Saat membuat toSearchableArray untuk model tertentu, jika tidak ada ID disertakan dalam larik final, saya tidak dapat mengimpor data menggunakan php artisan scout:import "App\Book" . Tetapi jika saya menyertakan ID , maka itu menjadi tersedia untuk dicari dengan ID juga, yang merupakan perilaku yang ingin saya hindari. Apa cara yang tepat untuk menonaktifkan pencarian dengan ID ?

Contoh kode:

    public function toSearchableArray()
    {
        $array = $this->toArray();

        foreach(array_keys($array) as $key) {
            //if I unset ID also, I won't be able to import table data
            if(in_array($key, ['id', 'title', 'name'])) continue;
            unset($array[$key]);
        }

        return $array;
    }

Komentar yang paling membantu

Hai @milosevicn ,

->toSearchableArray() mendefinisikan data yang disimpan dalam MeiliSearch untuk dokumen (objek) tertentu. Menghilangkan id akan menghasilkan elemen yang tidak dapat ditemukan dalam pencarian karena secara default id adalah kunci utama yang digunakan untuk mengidentifikasi dokumen.

Untuk mencegah MeiliSearch mencari di semua bidang, pertimbangkan untuk memperluas fungsionalitas paket ini dan menyetel searchAttributes dalam MeiliSearch. Anda dapat menemukan tutorial untuk melakukan ini di sini .

Semua 5 komentar

Hai @milosevicn ,

->toSearchableArray() mendefinisikan data yang disimpan dalam MeiliSearch untuk dokumen (objek) tertentu. Menghilangkan id akan menghasilkan elemen yang tidak dapat ditemukan dalam pencarian karena secara default id adalah kunci utama yang digunakan untuk mengidentifikasi dokumen.

Untuk mencegah MeiliSearch mencari di semua bidang, pertimbangkan untuk memperluas fungsionalitas paket ini dan menyetel searchAttributes dalam MeiliSearch. Anda dapat menemukan tutorial untuk melakukan ini di sini .

@mmachatschek Maaf mengganggu Anda, tetapi saya tidak ingin membuka masalah baru untuk ini. Mungkin terkait dengan pertanyaan saya di atas.
Ketika saya menambahkan dokumen menggunakan perintah php artisan scout:import , semuanya berfungsi sebagaimana mestinya, tetapi ketika saya melakukan hal yang sama menggunakan /indexes/:index_uid/documents route ( ->addDocuments() ) itu tidak menghargai toSearchableArray() aturan. Jadi jika saya mencoba menambahkan seluruh model, semua kolom akan ditambahkan.
Saya mungkin dapat mengatasi ini dengan memilih kolom tertentu saat melakukan kueri, tetapi apakah ada cara untuk membuat fungsi addDocuments() itu sendiri mengetahui toSearchableArray() ?

Hai @milosevicn ,

paket ini pada dasarnya adalah pembungkus untuk perpustakaan PHP MeiliSearch dan memperluas Laravel Scout.

Saat menambahkan dokumen "secara manual", semua keajaiban yang disediakan Scout misalnya menambahkan objek baru ke indeks atau memperbarui yang sudah ada dengan bidang tertentu, dll. akan hilang karena Anda melewatkan langkah itu.

Apakah ada niat khusus yang Anda miliki dengan menambahkan dokumen secara manual?

Terima kasih telah membalas @mmachatschek

Saya memiliki aplikasi multitenancy - dua aplikasi terpisah (pemilik dan penyewa). Karena itu, saya tidak dapat menggunakan fungsionalitas Laravel Scout yang telah ditentukan sebelumnya untuk memperbarui dokumen secara otomatis setelah sesuatu ditambahkan ke database. Itu sebabnya saya menggunakan webhook untuk memberi tahu aplikasi penyewa saya ketika sesuatu terjadi di database sebenarnya pada pemilik (saat dibuat/diperbarui/dihapus). Saya ingin menambahkan dokumen itu setelah saya mendapatkan webhook di penyewa

@milosevicn Saya pikir Anda bisa melakukan $model->touch() . Ini memperbarui kolom updated_at dari model dan acara updated akan dipicu pada aplikasi penyewa. Pendengar acara Scout kemudian akan memicu pembaruan pada indeks. Apakah ini berhasil untuk Anda?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat