Meilisearch-laravel-scout: Saya tidak dapat mengindeks dokumen saya (tidak masalah di Algolia)

Dibuat pada 4 Agu 2020  ·  30Komentar  ·  Sumber: meilisearch/meilisearch-laravel-scout

Saya menggunakan Laravel 7, MS 0.13
Saya mencoba mengindeks model saya menggunakan:
php artisan scout:import "App\Models\Product"
Lalu saya lakukan (local_product adalah indeks saya):
curl -X GET 'http://localhost:7700/indexes/local_product/documents'
Dan saya mendapatkan []

Jika saya mengindeks di Algolia, dokumen saya baik-baik saja di sana.
Juga jika saya mengindeks film melakukan:
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents' --data @movies.json
Film juga diindeks.

Laravel integration

Komentar yang paling membantu

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

        $array['id'] = (string)$array['_id'];

        return $array;
    }

Itu bekerja

Semua 30 komentar

Halo @elfeffe ,

Ini sulit untuk membantu Anda tanpa informasi lebih lanjut.

jika Anda mencatat instance meilisearch Anda, apakah Anda mendapatkan:

"POST /indexes/local_product/documents?primaryKey=id HTTP/1.1" 202 14 

Jika Anda menggunakan toSearchableArray() dalam model Produk Anda, dapatkah Anda menunjukkan kontennya kepada saya, jadi saya mungkin dapat mereproduksi kesalahan yang sama.

Saya menggunakan MongoDb. Saya pikir kuncinya adalah _id
Bisakah itu?
Saya menggunakan toSearchableArray untuk memfilter beberapa bidang, tetapi mereka mengindeks di Algolia. Dan saya membuang array terakhir dan tidak apa-apa.
Saya tidak punya komputer sekarang, apa yang Anda ingin saya coba?

Saya tidak mengerti apa yang Anda maksud dengan

jika Anda mencatat instance meilisearch Anda, apakah Anda mendapatkan:

Beri tahu saya apa yang Anda ingin saya coba

Jika saya mencoba

curl \-X POST 'http://localhost:7700/indexes/local_product/documents' \--data '[{"id": 287947,"title": "Shazam","poster": "https://image.tmdb.org/t/p/w1280/xnopI5Xtky18MPhK40cZAGAOVeV.jpg","overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.","release_date": "2019-03-23"}]'

saya mendapat
{"updateId":31}

Tapi kemudian saya lakukan
curl -X GET 'http://localhost:7700/indexes/local_product/documents'
Dan saya mengerti

[]
Lagi

Halo @elfeffe

Anda selalu dapat memeriksa status pembaruan, seringkali MeiliSearch akan memberi tahu Anda apa kesalahannya, jika pembaruan gagal.

Anda dapat memeriksa: Dapatkan status pembaruan

Dan untuk contoh terakhir Anda dapat mencoba

curl -X GET 'http://localhost:7700/indexes/local_product/updates/31'

yang seharusnya memberi Anda lebih banyak informasi tentang apa yang terjadi.

Saya menggunakan MongoDb. Saya pikir kuncinya adalah _id
Bisakah itu?

Ketika Anda telah membuat indeks local_product apakah Anda menentukan parameter kunci ?
php artisan scout:index local_product --key _id

Saya menggunakan toSearchableArray untuk memfilter beberapa bidang, tetapi mereka mengindeks di Algolia. Dan saya membuang array terakhir dan tidak apa-apa.

Bisakah Anda juga mencoba dengan mengomentari toSearchableArray(), saya rasa ini bukan masalahnya di sini, tetapi tidak ada biaya untuk mencobanya.

Saya telah menghapus toSearchableArray()
Kemudian saya mencoba melakukan:
php artisan scout:index local_product --key _id
Tidak bekerja.

Kemudian melakukan
php artisan scout:index local_product --key id
Bersama dengan

/**
     * Get the value used to index the model.
     *
     * <strong i="14">@return</strong> mixed
     */
    public function getScoutKey()
    {
        return $this->id;
    }

    /**
     * Get the key name used to index the model.
     *
     * <strong i="15">@return</strong> mixed
     */
    public function getScoutKeyName()
    {
        return 'id';
    }

Tidak ada, ketika saya melakukannya
curl -X GET 'http://localhost:7700/indexes/local_product/documents'

Saya hanya mendapatkan satu dokumen, yang diindeks menggunakan

curl \-X POST 'http://localhost:7700/indexes/local_product/documents' \--data '[{"id": 287947,"title": "Shazam","poster": "https://image.tmdb.org/t/p/w1280/xnopI5Xtky18MPhK40cZAGAOVeV.jpg","overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.","release_date": "2019-03-23"}]'

Apakah ada log yang bisa saya periksa?

Saat Anda mengimpor data Anda, apakah Anda mendapatkan sesuatu seperti ini:

shok@pop-os:~/web/blog$ php artisan scout:import "App\Models\Post"
Imported [App\Models\Post] models up to ID: 100
All [App\Models\Post] records have been imported.

log berada storage/logs/laravel.log

Apakah Anda mengatur antrian => true di scout.php atau SCOUT_QUEUE=true di .env Anda?

Saya telah mencoba dengan benar dan salah untuk antrian. Selalu saya dapatkan

Model [AppModelsProduct] yang diimpor hingga ID: 5eea4b314c80095faf5be593
Model [AppModelsProduct] yang diimpor hingga ID: 5eea4bd94c80095faf5be787
Mengimpor model [AppModelsProduct] hingga ID: 5eea4cc34c80095faf5be97b
Model [AppModelsProduct] yang diimpor hingga ID: 5eea4dfa4c80095faf5beb6f
Model [AppModelsProduct] yang diimpor hingga ID: 5eea4f6b4c80095faf5bed63
Model [AppModelsProduct] yang diimpor hingga ID: 5eea51164c80095faf5bef57
Model [AppModelsProduct] yang diimpor hingga ID: 5eea524e4c80095faf5bf099

Tapi tidak ada dokumen.
Saya tahu di mana log laravel berada, tetapi saya tidak memiliki kesalahan di sana, yang ingin saya lihat adalah log MS.
Apakah ada cara untuk melihat apa yang terjadi?

Dengan semua pengaturan yang sama, Algolia mengindeks dokumen saya.

Ok, Meilisearch laravel scout hanya mesin seperti copy paste dari Algolia. Jadi seharusnya tidak menjadi masalah tetapi saya juga belum pernah mencoba menjalankannya dengan mongodb ...

@eskombro @curquiza dapat menjawab adalah log MS.

Ini terkait dengan MongoDB, karena model Pengguna adalah MySQL dan berfungsi.
Maksud saya, ini terkait dengan MongoDB / Meilisearch, karena Algolia juga bekerja dengan MongoDB.

Akan sangat bagus jika saya dapat melihat beberapa log dari MS, sangat disayangkan jika Algolia mendukungnya tetapi tidak Meilisearch.

Saya dapat mencoba menggali masalahnya, tetapi saya membutuhkan bantuan Anda tentang bagaimana saya dapat menginstal mongoDB dengan laravel

Untuk saat ini, log MeiliSearch langsung dicetak ke stdout, jadi itu tergantung di mana Anda menjalankan instance MeiliSearch Anda. Di mana itu berjalan?

Saya membuka masalah untuk membahas log persisten di MeiliSearch di sini: https://github.com/meilisearch/MeiliSearch/issues/898

@elfeffe apakah Anda memeriksa status pembaruan seperti yang saya sarankan di komentar sebelumnya? Jika dokumen berhasil dikirim ke MeilISearch dan Anda mendapatkan ID status, kemungkinan besar Anda akan menemukan di dalam status pembaruan itu informasi tentang apa masalahnya ketika MeilISearch mencoba mengindeks. Coba ini: https://github.com/meilisearch/meilisearch-laravel-scout/issues/36#issuecomment -668787383

Lihat ini

curl \-X POST 'http://localhost:7700/indexes/local_product/documents' \--data '[{"id": 287947,"title": "Shazam","poster": "https://image.tmdb.org/t/p/w1280/xnopI5Xtky18MPhK40cZAGAOVeV.jpg","overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.","release_date": "2019-03-23"}]'

Itu berhasil, tapi

curl \-X POST 'http://localhost:7700/indexes/local_product/documents' \--data '[{"id": 5eea4bd94c80095faf5be787,"title": "Shazam 2","poster": "https://image.tmdb.org/t/p/w1280/xnopI5Xtky18MPhK40cZAGAOVeV.jpg","overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.","release_date": "2019-03-23"}]'

"5eea4bd94c80095faf5be787" adalah _id MongoDB
Itu mengembalikan keindahan ini

{"message":"JSON tidak valid: nomor tidak valid pada baris 1 kolom 11","errorCode":"bad_request","errorType":"invalid_request_error","errorLink":" https://docs.meilisearch.com/errors #bad_request "}

Saya pikir JSON valid, ada beberapa masalah dengan MS dan Kunci khusus.
Saya tidak tahu apakah itu panjangnya, huruf-hurufnya, atau apa.

Setelah beberapa kali mencoba saya pikir surat-surat itu masalahnya, MS tidak menerima surat-surat di id. Tapi Laravel membiarkan Anda meletakkan surat di sana.
Itu masalahnya menurut saya

Ya, Anda hanya perlu mengirimkannya sebagai string, dikelilingi oleh tanda kutip ganda

Ini akan bekerja dengan "id": "5eea4bd94c80095faf5be787" bukan "id": 5eea4bd94c80095faf5be787 karena 5eea4bd94c80095faf5be787 bukan angka yang valid

Tapi saya tidak mengontrol bagaimana ekstensi Pramuka Anda mengirimkannya

Bahkan melakukan ini

/**
     * Get the value used to index the model.
     *
     * <strong i="6">@return</strong> mixed
     */
    public function getScoutKey()
    {
        return (string)$this->_id;
    }

Tidak berfungsi, saya pikir mesin ini harus menangani id string

lakukan hal yang sama di toSearchableArray()

return [ 'id' => (string) $this->_id]
or
return [ '_id' => (string) $this->_id]

Saya tidak tahu apa yang Anda tetapkan sebagai kunci

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

        $array['id'] = (string)$array['_id'];

        return $array;
    }

Itu bekerja

Satu hal terakhir.
Algolia menangani itu secara otomatis, bersama dengan pembuatan indeks.
Maksud saya, Algolia membuat indeks jika tidak ada, dan saya dapat mengindeks ID dengan huruf tanpa konversi apa pun.
Saya pikir MS harus menyertakan kedua fitur tersebut.

Maksudku, Algolia membuat indeks jika tidak ada

Memang, MeiliSearch API belum menangani fitur ini.
Sebagai solusi alternatif, sebagian besar SDK kami menyediakan metode get_or_create_index (seperti yang dilakukan SDK PHP)

dan saya dapat mengindeks ID dengan huruf tanpa konversi apa pun.

Masalah yang Anda alami berasal dari validitas JSON. Bahkan Algolia API tidak menerima JSON yang tidak valid: mengirim angka dengan huruf tanpa mengutipnya ( " ) dianggap sebagai JSON yang tidak valid dan akan gagal.

Lihat dasbor Algolia:

Capture d’écran 2020-08-06 à 10 52 59

Capture d’écran 2020-08-06 à 10 53 15

Mungkin Laravel SDK Algolia mengubah nomor Anda dengan huruf menjadi string dan itulah mengapa Anda tidak mengalami kegagalan

Saya pikir MS harus menyertakan kedua fitur tersebut.

Jadi mungkin meilisearch-laravel-scout dapat menyertakan "fitur kutipan", tetapi MeiliSearch tidak bisa karena mengharapkan JSON yang valid

Ya, dalam kedua kasus saya berbicara tentang Mesin Pramuka ini, kami berada dalam integrasi Pramuka di sini.
SDK dapat menyediakan metode untuk membuat indeks, tetapi Scout gagal jika indeks tidak ada.

Sama dengan Id dengan huruf, saya mengerti bahwa JSOn salah bentuk, tetapi mesin Scout harus mengontrol itu sebelum gagal.
Seperti yang dilakukan Algolia, karena yang itu tidak gagal dengan huruf.

Oke oke tidak yakin untuk mengerti

Mereka bisa menjadi fitur yang bagus untuk diterapkan! 🙂.

Sunting: kita harus berpikir jika kita mengimplementasikannya dalam meilisearch-php atau dalam paket meilisearch-laravel-scout.

@curquiza
Terserah, dua-duanya bagus.

Jika kita mengimplementasikannya di scout, saya kira symfony (dan implementasi kerangka kerja lainnya) juga harus mengimplementasikannya (mungkin sudah demikian). Jadi mungkin lebih baik untuk memilikinya di SDK saja ?

Saya tidak yakin pramuka menerapkannya untuk Algolia, saya pikir ini ditangani oleh SDK PHP Algolia, saya akan memeriksa ini ketika saya punya sedikit waktu luang.

@shokme , Anda benar, mungkin lebih pintar melakukannya di PHP SDK daripada di integrasi laravel-scout.
Beri tahu kami tentang penyelidikan Anda, saya akan memindahkan masalah (atau membuat ulang) yang sesuai! 🙂.

Jadi, setelah menyelidiki semuanya.
Saya telah menginstal mongodb di laravel menggunakan jenssegers/laravel-mongodb .

Saya sudah mulai dengan membuat file index.
php artisan scout:index cars -k _id

membuat model

<?php

namespace App;

use Jenssegers\Mongodb\Eloquent\Model;
use Laravel\Scout\Searchable;

class Car extends Model
{
    use Searchable;

    public function getScoutKey() // not required if this is already your primary key
    {
        return $this->_id;
    }

    public function getScoutKeyName() // not required if this is already your primary key
    {
        return '_id';
    }
}

membuat mobil baru

$car = new App\Car();
$car->name = 'mustang';
$car->constructor = 'ford';
$car->type = 'muscle';
$car->horses = 280;
$car->save();

Model dikirim ke meilisearch tanpa masalah!

{
  "status": "processed",
  "updateId": 1,
  "type": {
    "name": "DocumentsAddition",
    "number": 1
  },
  "duration": 0.005275826,
  "enqueuedAt": "2020-08-29T17:43:55.104917708Z",
  "processedAt": "2020-08-29T17:43:55.121602037Z"
}

Saat melakukan pencarian saya mendapatkan hasil yang benar

App\Car::search('mustang')->get();

```json
[
{
"_id": "5f4a93dbd9668370086c7752",
"nama": "mustar",
"konstruktor": "ford",
"tipe": "otot",
"kuda": 280,
"updated_at": "29-08-2020T17:43:55.102000Z",
"created_at": "29-08-2020T17:43:55.102000Z"
}
]

The only problem I have encounter while trying to reproduce the bug was by forgot to set `_id` has primaryKey
and the update status was returning:
```json
{
  "status": "failed",
  "updateId": 3,
  "type": {
    "name": "DocumentsAddition",
    "number": 1
  },
  "error": "serializer error; Primary key is missing.",
  "duration": 9.817e-6,
  "enqueuedAt": "2020-08-29T17:21:00.098580201Z",
  "processedAt": "2020-08-29T17:21:00.100495474Z"
}

Jadi, sejujurnya saya tidak mengerti mengapa Anda tidak mendapatkan string kembali pada $this->_id @elfeffe

@shokme saya tidak tahu. Saya akan melanjutkan pekerjaan saya dengan pencarian dalam beberapa hari dan saya akan memberi tahu Anda jika saya menemukan sesuatu yang baru.
SDK harus membuat indeks secara otomatis seperti yang dilakukan Algolia, dengan I'd yang benar, untuk menghindari kesalahan.

SDK harus membuat indeks secara otomatis seperti yang dilakukan Algolia, dengan I'd yang benar, untuk menghindari kesalahan.

Ini direncanakan di mesin inti MeiliSearch! 🙂.
https://github.com/meilisearch/MeiliSearch/issues/918

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

Cannonb4ll picture Cannonb4ll  ·  6Komentar

curquiza picture curquiza  ·  17Komentar

husonghua picture husonghua  ·  5Komentar

ctf0 picture ctf0  ·  7Komentar

marky291 picture marky291  ·  6Komentar