Meilisearch-laravel-scout: Pular pesquisa por ID

Criado em 6 abr. 2021  ·  5Comentários  ·  Fonte: meilisearch/meilisearch-laravel-scout

Olá,

Ao criar toSearchableArray para um modelo específico, se não houver ID incluído no array final, não posso importar os dados usando php artisan scout:import "App\Book" . Mas se eu incluir ID , então ele se tornará disponível para pesquisa por ID também, que é o comportamento que eu gostaria de escapar. Qual é a maneira correta de desativar a pesquisa por ID ?

Código de exemplo:

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

Comentários muito úteis

Ei @milosevicn ,

o ->toSearchableArray() define os dados armazenados no MeiliSearch para um documento específico (objeto). A omissão de id resultará em elementos não detectáveis ​​na pesquisa porque, por padrão, id é a chave primária usada para identificar um documento.

Para evitar que o MeiliSearch pesquise em todos os campos, considere estender a funcionalidade deste pacote e definir searchAttributes no MeiliSearch. Você pode encontrar um tutorial para fazer isso aqui .

Todos 5 comentários

Ei @milosevicn ,

o ->toSearchableArray() define os dados armazenados no MeiliSearch para um documento específico (objeto). A omissão de id resultará em elementos não detectáveis ​​na pesquisa porque, por padrão, id é a chave primária usada para identificar um documento.

Para evitar que o MeiliSearch pesquise em todos os campos, considere estender a funcionalidade deste pacote e definir searchAttributes no MeiliSearch. Você pode encontrar um tutorial para fazer isso aqui .

@mmachatschek Desculpe incomodá-lo, mas eu não queria abrir um novo problema para isso. Pode estar relacionado à minha pergunta lá em cima.
Quando estou adicionando documentos usando o comando php artisan scout:import , tudo funciona como deveria, mas quando estou fazendo o mesmo usando /indexes/:index_uid/documents route ( ->addDocuments() ) isso não respeita toSearchableArray() regras. Portanto, se eu tentar adicionar o modelo inteiro, todas as colunas serão adicionadas.
Eu provavelmente seria capaz de superar isso selecionando colunas específicas ao fazer a consulta, mas existe uma maneira de fazer a função addDocuments() reconhecer toSearchableArray() ?

Olá @milosevicn ,

este pacote é basicamente um wrapper para a biblioteca MeiliSearch PHP e estende o Laravel Scout.

Ao adicionar documentos "manualmente", toda a mágica que o Scout oferece, por exemplo, adicionar novos objetos ao índice ou atualizar os existentes com campos específicos, etc., se perde porque você pula essas etapas.

Você tem uma intenção específica ao adicionar documentos manualmente?

Obrigado por responder @mmachatschek

Eu tenho um aplicativo multilocação - dois aplicativos separados (senhorio e inquilino). Por causa disso, não posso usar a funcionalidade predefinida do Laravel Scout para atualizar documentos automaticamente, uma vez que algo é adicionado ao banco de dados. É por isso que estou usando um webhook para informar meu aplicativo de locatário quando algo realmente aconteceu no banco de dados do proprietário (em criado / atualizado / excluído). Quero adicionar esses documentos assim que pegar um webhook no locatário

@milosevicn Acho que você poderia simplesmente fazer um $model->touch() . Isso atualiza a coluna updated_at do modelo e o evento updated será acionado no aplicativo locatário. O ouvinte de evento do Scout acionará uma atualização no índice. Isso funcionaria para você?

Esta página foi útil?
0 / 5 - 0 avaliações