// config/scout.php
...
'pgsql' => [
// Connection to use. See config/database.php
'connection' => env('DB_CONNECTION', 'pgsql'),
// You may want to update index documents directly in PostgreSQL (i.e. via triggers).
// In this case you can set this value to false.
'maintain_index' => true,
// You can explicitly specify what PostgreSQL text search config to use by scout.
// Use \dF in psql to see all available configurations in your database.
'config' => 'english',
// You may set the default querying method
// Possible values: plainquery, phrasequery, tsquery
// plainquery is used if this option is omitted.
'search_using' => 'tsquery'
],
...
class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->text('title');
$table->text('content')->nullable();
$table->integer('user_id');
$table->timestamps();
});
DB::statement('ALTER TABLE posts ADD searchable tsvector NULL');
DB::statement('CREATE INDEX posts_searchable_index ON posts USING GIN (searchable)');
// Or alternatively
// DB::statement('CREATE INDEX posts_searchable_index ON posts USING GIST (searchable)');
}
public function down()
{
Schema::drop('posts');
}
}
class Post extends Model
{
use Searchable;
// ...
public function searchableOptions()
{
return [
// You may wish to change the default name of the column
// that holds parsed documents
'column' => 'indexable',
// You may want to store the index outside of the Model table
// In that case let the engine know by setting this parameter to true.
'external' => true,
// If you don't want scout to maintain the index for you
// You can turn it off either for a Model or globally
'maintain_index' => true,
// Ranking groups that will be assigned to fields
// when document is being parsed.
// Available groups: A, B, C and D.
'rank' => [
'fields' => [
'title' => 'A',
'content' => 'B',
'author' => 'D',
'tags' => 'C',
],
// Ranking weights for searches.
// [D-weight, C-weight, B-weight, A-weight].
// Default [0.1, 0.2, 0.4, 1.0].
'weights' => [0.1, 0.2, 0.4, 1.0],
// Ranking function [ts_rank | ts_rank_cd]. Default ts_rank.
'function' => 'ts_rank_cd',
// Normalization index. Default 0.
'normalization' => 32,
],
// You can explicitly specify a PostgreSQL text search configuration for the model.
// Use \dF in psql to see all available configurationsin your database.
'config' => 'simple',
];
}
}
...
public function searchableAdditionalArray()
{
return [
'user_id' => $this->user_id,
];
}
protected $hidden = [
'searchable',
];
// plainto_tsquery()
$posts = App\Post::search('cat rat')
->usingPlainQuery()->get()
// phraseto_tsquery()
$posts = App\Post::search('cat rat')
->usingPhraseQuery()->get()
// to_tsquery()
$posts = App\Post::search('fat & (cat | rat)')
->usingTsQuery()->get()
// websearch_to_tsquery()
// uses web search syntax
$posts = App\Post::search('"sad cat" or "fat rat" -mouse')
->usingWebSearchQuery()->get()
// DIY using a callback
use ScoutEngines\Postgres\TsQuery\ToTsQuery;
$results = App\Post::search('fat & (cat | rat)', function ($builder, $config) {
return new ToTsQuery($builder->query, $config);
})->get();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.