Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Laravel和Postgresql进行全文搜索_Laravel_Postgresql - Fatal编程技术网

使用Laravel和Postgresql进行全文搜索

使用Laravel和Postgresql进行全文搜索,laravel,postgresql,Laravel,Postgresql,我试图做全文搜索,但我陷入了一个错误 迁移: public function up() { Schema::create('lkp_answers', function (Blueprint $table) { $table->id(); $table->string('name'); //code... }); DB::statement("ALTER TABLE lkp_answers ADD COLUMN

我试图做全文搜索,但我陷入了一个错误

迁移:

public function up()
{
    Schema::create('lkp_answers', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        //code...
    });

    DB::statement("ALTER TABLE lkp_answers ADD COLUMN searchtext TSVECTOR");
    DB::statement("UPDATE lkp_answers SET searchtext = to_tsvector('english', name )");
    DB::statement("CREATE INDEX searchtext_gin ON lkp_answers USING GIN(searchtext)");
    DB::statement("CREATE TRIGGER ts_searchtext BEFORE INSERT OR UPDATE ON lkp_answers FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('searchtext', 'pg_catalog.english', 'name')");
}

public function down()
{
    DB::statement("DROP TRIGGER IF EXISTS tsvector_update_trigger ON lkp_answers");
    DB::statement("DROP INDEX IF EXISTS searchtext_gin");
    DB::statement("ALTER TABLE lkp_answers DROP COLUMN searchtext");
    Schema::dropIfExists('lkp_answers');
}
型号

class LkpAnswer extends Model
{
    public function scopeSearch($query, $search)
    {
        if (!$search) {
            return $query;
        }
        return $query->whereRaw('searchtext @@ to_tsquery(\'english\', ?)', [$search])
            ->orderByRaw('ts_rank(searchtext, to_tsquery(\'english\', ?)) DESC', [$search]);
    }
}
控制器

$title = 'RETENTION OF TITLE';
$topics = LkpAnswer::search($title)->get();
错误:

public function up()
{
    Schema::create('lkp_answers', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        //code...
    });

    DB::statement("ALTER TABLE lkp_answers ADD COLUMN searchtext TSVECTOR");
    DB::statement("UPDATE lkp_answers SET searchtext = to_tsvector('english', name )");
    DB::statement("CREATE INDEX searchtext_gin ON lkp_answers USING GIN(searchtext)");
    DB::statement("CREATE TRIGGER ts_searchtext BEFORE INSERT OR UPDATE ON lkp_answers FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('searchtext', 'pg_catalog.english', 'name')");
}

public function down()
{
    DB::statement("DROP TRIGGER IF EXISTS tsvector_update_trigger ON lkp_answers");
    DB::statement("DROP INDEX IF EXISTS searchtext_gin");
    DB::statement("ALTER TABLE lkp_answers DROP COLUMN searchtext");
    Schema::dropIfExists('lkp_answers');
}
SQLSTATE[42601]:语法错误:7错误:tsquery中的语法错误: “保留所有权”(SQL:从“lkp_答案”中选择*,其中 searchtext@@to_tsquery('english',保留所有权)订购人 ts_rank(searchtext,to_tsquery('english',保留所有权))DESC)

我找到了答案。 在控制器中,我必须将
to_tsquery
替换为
plainto_tsquery
,它可以工作。 因为我使用的是应用程序中的字符串,所以最好使用
plainto\u tsquery
,因为它使用纯字符串,并且它假设没有操作。

我找到了答案。 在控制器中,我必须将
to_tsquery
替换为
plainto_tsquery
,它可以工作。 因为我使用应用程序中的字符串,所以最好使用
plainto\u tsquery
,因为它使用纯字符串,并且它假定这不是操作