Laravel Scout с TNTSearch - PullRequest
       18

Laravel Scout с TNTSearch

0 голосов
/ 16 мая 2018

Я использую Laravel Scout для замены своих функций поиска, так как раньше это был один большой оператор SQL LIKE, подобный приведенному ниже.

$users = User::where('username', 'like', '%'.$request->get('q').'%')
    ->orWhere('displayName', 'like', '%'.$request->get('q').'%')
    ->orWhere('email', 'like', '%'.$request->get('q').'%')
    ->orWhere('role', 'like', '%'.$request->get('q').'%')
    ->orWhere('department', 'like', '%'.$request->get('q').'%')
    ->orWhere('location', 'like', '%'.$request->get('q').'%')
    ->orWhere('directDialIn', 'like', '%'.$request->get('q').'%')
    ->orWhere('mobileNumber', 'like', '%'.$request->get('q').'%')
    ->get();

Я делал это для нескольких моделей, таких как Article, Event и т. Д., И сценарий в конечном итоге раздулся. Я выполнил необходимые шаги в документации и настроил Laravel Scout для использования TNTSearch с использованием предоставляемого ими пакета Laravel.

В документации Laravel сказано, что Laravel Scout не очень хорош в продвинутых пунктах, где, поэтому, следуя документации немного дальше вниз по странице, я сделал что-то подобное в верхней части моего контроллера.

use Searchable;

public function shouldBeSearchable()
{
    return $this->published === "open";
}

/**
 * Get the indexable data array for the model.
 *
 * @return array
 */
public function toSearchableArray()
{
    $array = $this->toArray();

    // Customize array...

    return $array;
}

Он должен возвращать только те модели, в которых опубликованные значения равны 'open' в моей таблице базы данных (или я так думал). Однако я запускаю следующую команду:

php artisan scout:import "App\Article"

Затем выполните поиск, он по-прежнему возвращает закрытые статьи. Я думал, определив shouldBeSearchable, это предотвратит это?

Кроме того, возможно ли индексировать отношения на модели при выполнении поиска разведчика? Например, если у пользователя есть профиль, могу ли я использовать Scout для поиска профиля, связанного с пользователем? Я хочу, чтобы можно было вводить текст в поле, а Скаут сканирует текст и возвращает пользователя, которому принадлежит профиль.

1 Ответ

0 голосов
/ 16 мая 2018

Я предполагаю, что вы используете teamtnt / laravel-scout-tntsearch-driver?Если это так, он еще не поддерживает функцию Scout shouldBeSearchable.

Вот соответствующий тикет: https://github.com/teamtnt/laravel-scout-tntsearch-driver/issues/153

...