Meilisearch-laravel-scout: ドキュメントのむンデックスを䜜成できたせんアルゎリアでは問題ありたせん

䜜成日 2020幎08月04日  Â·  30コメント  Â·  ゜ヌス: meilisearch/meilisearch-laravel-scout

Laravel 7、MS0.13を䜿甚しおいたす
次を䜿甚しおモデルのむンデックスを䜜成しようずしおいたす。
php artisan scout:import "App\Models\Product"
次に、local_productが私のむンデックスです
curl -X GET 'http://localhost:7700/indexes/local_product/documents'
そしお私は[]を手に入れたす

私がアルゎリアで玢匕を付ければ、私の文曞はそこで倧䞈倫です。
たた、私が映画のむンデックスを䜜成する堎合
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents' --data @movies.json
映画も玢匕付けされおいたす。

Laravel integration

最も参考になるコメント

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

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

        return $array;
    }

それはうたくいく

党おのコメント30件

こんにちは@elfeffe 、

これは、より倚くの情報なしであなたを助けるのは難しいです。

meilisearchむンスタンスをログに蚘録するず、次のようになりたす。

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

補品モデルでtoSearchableArray()を䜿甚しおいる堎合、コンテンツを衚瀺しおいただけたせんか。同じ゚ラヌを再珟できる可胜性がありたす。

私はMongoDbを䜿甚しおいたす。 キヌは_idだず思いたす
それはできたすか
toSearchableArrayを䜿甚しお䞀郚のフィヌルドをフィルタリングしたすが、それらはAlgoliaでむンデックスを䜜成したす。 そしお、最埌の配列をダンプしたす。それで問題ありたせん。
私は今コンピュヌタヌを持っおいたせん、あなたは私に䜕を詊しお欲しいですか

どういう意味かわからない

meilisearchむンスタンスをログに蚘録するず、次のようになりたす。

䜕をしおほしいか教えおください

やっおみたら

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"}]'

私は埗る
{"updateId":31}

しかし、私はしたす
curl -X GET 'http://localhost:7700/indexes/local_product/documents'
そしお、私は埗る

[]
たた

こんにちは@elfeffe

曎新ステヌタスはい぀でも確認できたす。ほずんどの堎合、曎新が倱敗した堎合に備えお、MeiliSearchぱラヌの内容を通知したす。

確認できたす曎新ステヌタスを取埗したす

そしお最埌の䟋では、詊すこずができたす

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

これにより、䜕が起こっおいるかに぀いおの詳现情報が埗られるはずです。

私はMongoDbを䜿甚しおいたす。 キヌは_idだず思いたす
それはできたすか

むンデックスlocal_productを䜜成したずきに、キヌパラメヌタを指定したしたか
php artisan scout:index local_product --key _id

toSearchableArrayを䜿甚しお䞀郚のフィヌルドをフィルタリングしたすが、それらはAlgoliaでむンデックスを䜜成したす。 そしお、最埌の配列をダンプしたす。それで問題ありたせん。

toSearchableArrayにコメントしお詊すこずもできたすかこれはここでは問題ではないず思いたすが、詊すのに費甚はかかりたせん。

toSearchableArrayを削陀したした
それから私はやっおみたした
php artisan scout:index local_product --key _id
動䜜したせん。

その埌、
php artisan scout:index local_product --key id
䞀緒に

/**
     * 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';
    }

䜕も、私がするずき
curl -X GET 'http://localhost:7700/indexes/local_product/documents'

1぀のドキュメントを取埗し、1぀を䜿甚しおむンデックスを䜜成したす

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"}]'

確認できるログはありたすか

デヌタをむンポヌトするず、次のようなものが埗られたしたか

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.

ログはstorage/logs/laravel.logにありたす

scout.phpでqueue => trueを蚭定したしたか、.envでSCOUT_QUEUE = trueを蚭定したしたか

キュヌに察しおtrueずfalseの䞡方を詊しおみたした。 い぀も私は埗る

ID5eea4b314c80095faf5be593たでのむンポヌトされた[AppModelsProduct]モデル
ID5eea4bd94c80095faf5be787たでのむンポヌトされた[AppModelsProduct]モデル
ID5eea4cc34c80095faf5be97bたでのむンポヌトされた[AppModelsProduct]モデル
ID5eea4dfa4c80095faf5beb6fたでのむンポヌトされた[AppModelsProduct]モデル
ID5eea4f6b4c80095faf5bed63たでのむンポヌトされた[AppModelsProduct]モデル
ID5eea51164c80095faf5bef57たでのむンポヌトされた[AppModelsProduct]モデル
ID5eea524e4c80095faf5bf099たでのむンポヌトされた[AppModelsProduct]モデル

しかし、文曞はありたせん。
Laravelのログがどこにあるかは知っおいたすが、゚ラヌはありたせん。芋たいのはMSログです。
䜕が起こっおいるのかを確認する方法はありたすか

すべお同じ蚭定で、Algoliaは私のドキュメントのむンデックスを䜜成しおいたす。

わかりたした。Meilisearchlaravelスカりトは、アルゎリアのもののコピヌペヌストのような゚ンゞンにすぎたせん。 したがっお、問題はないはずですが、mongodbで実行しようずしたこずもありたせん...

@eskombro @curquizaは、MSログに答えるこずができたす。

ナヌザヌモデルはMySQLであり、機胜するため、これはMongoDBに関連しおいたす。
぀たり、これはMongoDB / Meil​​isearchに関連しおいたす。これは、AlgoliaもMongoDBず連携しおいるためです。

MSからいく぀かのログを取埗できれば玠晎らしいず思いたすが、Algoliaがサポヌトしおいるのに、Meilisearchがサポヌトしおいないのは悲しいこずです。

問題を掘り䞋げるこずはできたすが、laravelでmongoDBをむンストヌルする方法に぀いおあなたの助けが必芁です

珟圚のずころ、MeiliSearchログはstdoutに盎接出力されるため、MeiliSearchむンスタンスを実行しおいる堎所によっお異なりたす。 どこで走っおいたすか

MeiliSearchで氞続ログに぀いお説明するための問題をここで開きたした https //github.com/meilisearch/MeiliSearch/issues/898

@elfeffe以前のコメントで提案したように、曎新ステヌタスを確認したしたか ドキュメントがMeilISearchに正垞に送信され、ステヌタスIDを取埗した堎合、その曎新ステヌタス内に、MeilISearchがむンデックスを䜜成しようずしたずきに䜕が問題であるかに関する情報が芋぀かる可胜性がありたす。 これを詊しおください https //github.com/meilisearch/meilisearch-laravel-scout/issues/36#issuecomment -668787383

これを芋おください

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"}]'

それは機胜したすが

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」はMongoDB_idです
それはこの矎しさを返したす

{"message" "無効なJSON1行11列の無効な番号"、 "errorCode" "bad_request"、 "errorType" "invalid_request_error"、 "errorLink" " https://docs.meilisearch.com/errors #bad_request "}

JSONは有効だず思いたすが、MSずカスタムキヌに問題がありたす。
長さなのか、文字なのか、それずも䜕なのかわかりたせん。

䜕床か詊した埌、文字が問題だず思いたすが、MSはIDの文字を受け入れたせん。 しかし、Laravelではそこに文字を入れるこずができたす。
それが私が思う問題です

はい、二重匕甚笊で囲んだ文字列ずしお送信する必芁がありたす

5eea4bd94c80095faf5be787は有効な番号ではないため、 "id": 5eea4bd94c80095faf5be787 $ではなく"id": "5eea4bd94c80095faf5be787"で機胜したす🙂

しかし、私はあなたのスカりト拡匵機胜がそれを送信する方法を制埡しおいたせん🙂

これでも

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

それは機胜したせん、私はこの゚ンゞンが文字列IDを凊理しなければならないず思いたす

toSearchableArrayでも同じこずをしたす

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

あなたが鍵ずしお䜕を蚭定したのかわかりたせん

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

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

        return $array;
    }

それはうたくいく

最埌に䞀぀だけ。
Algoliaは、むンデックスの䜜成ずずもに、それを自動的に凊理したす。
぀たり、Algoliaは存圚しない堎合にむンデックスを䜜成し、倉換せずに文字でIDにむンデックスを付けるこずができたす。
MSには䞡方の機胜を含める必芁があるず思いたす。

぀たり、存圚しない堎合、アルゎリアはむンデックスを䜜成したす

実際、MeiliSearchAPIはただこの機胜を凊理しおいたせん。
別の解決策ずしお、ほずんどのSDKはget_or_create_indexメ゜ッドを提䟛したすPHP SDKず同様🙂

たた、倉換せずに文字でIDにむンデックスを付けるこずができたす。

あなたが抱えおいた問題は、JSONの劥圓性に起因しおいたす。 Algolia APIでさえ無効なJSONを受け入れたせん。匕甚笊を付けずに文字を含む数倀 " を送信するず、無効なJSONず芋なされ、倱敗したす。

Algoliaダッシュボヌドを参照しおください。

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

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

たぶん、AlgoliaのLaravel SDKは、文字を含む数倀を文字列に倉換したす。そのため、倱敗はありたせんでした🙂

MSには䞡方の機胜を含める必芁があるず思いたす。

したがっお、 meilisearch-laravel-scoutには「匕甚機胜」を含めるこずができたすが、MeiliSearchは有効なJSONを想定しおいるため、含めるこずができたせんでした😉

はい、どちらの堎合も、私はこのスカりト゚ンゞンに぀いお話しおいたすが、ここではスカりトの統合に取り組んでいたす。
SDKはむンデックスを䜜成するメ゜ッドを提䟛できたすが、むンデックスが存圚しない堎合、Scoutは倱敗したす。

文字付きのIdず同じように、JSOnの圢匏が正しくないこずは理解しおいたすが、Scout゚ンゞンは、倱敗する前にそれを制埡したす。
アルゎリアのように、それは文字で倱敗しないからです。

OKOKわかりたせんでした😉

それらは、実装するのに適した機胜になる可胜性がありたす。 🙂

線集それをmeilisearch-phpたたはmeilisearch-laravel-scoutパッケヌゞに実装するかどうかを怜蚎する必芁がありたす。

@curquiza
状況によりたすが、どちらも良いです。

スカりトでそれを実装する堎合、symfonyおよび他のフレヌムワヌクの実装もそれを実装する必芁があるず思いたすすでにそうであるかもしれたせん。 それで、代わりにSDKにそれを持っおいる方が良いかもしれたせんか

スカりトがAlgoliaに実装するかどうかはわかりたせんが、これはAlgolia PHP SDKで凊理されるず思いたす。少し時間があれば、これを確認したす。

@shokme 、その通りです。laravelずscoutの統合ではなく、PHPSDKで実行する方が賢明かもしれたせん。
調査に぀いおお知らせください。それに応じお問題を移動たたは再䜜成したす。 🙂

だから、党䜓を調査した埌。
jenssegers/laravel-mongodbを䜿甚しおlaravelにmongodbをむンストヌルしたした。

むンデックスを䜜成するこずから始めたした。
php artisan scout:index cars -k _id

モデルを䜜成する

<?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';
    }
}

新しい車を䜜成する

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

モデルは問題なくメむリサヌチに送信されたした。

{
  "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"
}

怜玢を行うず、正しい結果が埗られたす

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

`` `json
[
{{
"_id" "5f4a93dbd9668370086c7752"、
「名前」「ムスタング」、
「コンストラクタヌ」「フォヌド」、
「タむプ」「筋肉」、
「銬」280、
"updated_at" "2020-08-29T174355.102000Z"、
"created_at" "2020-08-29T17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"
}

ですから、正盎なずころ、 $this->_id @ elfeffeで文字列が返されない理由がわかりたせん

@shokmeわかりたせん。 数日埌に怜玢を再開し、䜕か新しいものが芋぀かったらお知らせしたす。
SDKは、間違いを避けるために、Algoliaず同じように、正しいむンデックスを自動的に䜜成する必芁がありたす。

SDKは、間違いを避けるために、Algoliaず同じように、正しいむンデックスを自動的に䜜成する必芁がありたす。

MeiliSearchコア゚ンゞンで蚈画されおいたす 🙂
https://github.com/meilisearch/MeiliSearch/issues/918

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡