使用查询构建器在 Laravel 中添加全文索引

Posted

技术标签:

【中文标题】使用查询构建器在 Laravel 中添加全文索引【英文标题】:Using query builder for adding fulltext index in Laravel 【发布时间】:2016-07-10 12:31:44 【问题描述】:

这是在mysql中添加全文索引的查询:

ALTER TABLE `TableName`
ADD FULLTEXT INDEX `IndexName` (`ColumnName`);

但是如何使用 Laravel 查询生成器添加全文索引?

【问题讨论】:

【参考方案1】:

应该这样做:DB::statement

DB::statement('ALTER TABLE TableName ADD FULLTEXT INDEX IndexName (ColumnName)');

【讨论】:

【参考方案2】:

在 Laravel >= 6.15.0 上,您可以像这样扩展 Illuminate\Database\Schema\Grammars\MySqlGrammarIlluminate\Database\Schema\Blueprint 类(例如,在 AppServiceProviderboot() 方法上):

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Schema\Grammars\MySqlGrammar;
use Illuminate\Support\Fluent;

Blueprint::macro('fulltext', function ($columns, $name = null, $algorithm = null)

    return $this->indexCommand('fulltext', $columns, $name, $algorithm);
);

Blueprint::macro('dropFulltext', function ($index)

    return $this->dropIndexCommand('dropIndex', 'fulltext', $index);
);

MySqlGrammar::macro('compileFulltext', function (Blueprint $blueprint, Fluent $command)

    return $this->compileKey($blueprint, $command, 'fulltext');
);

并像这样在您的迁移中使用它:

Schema::table('flights', function (Blueprint $table) 
    $table->fulltext(['name', 'airline']);
);

//reverse the migration
Schema::table('flights', function (Blueprint $table) 
    $table->dropFulltext(['name', 'airline']);
);

【讨论】:

【参考方案3】:

对于多个Columns/Fields

DB::statement('ALTER TABLE Database.TableName ADD FULLTEXT fulltext_index (Col_1, col_2, col_3)');

【讨论】:

以上是关于使用查询构建器在 Laravel 中添加全文索引的主要内容,如果未能解决你的问题,请参考以下文章

solr调用lucene底层实现倒排索引全流程解析

solr调用lucene底层实现倒排索引全流程解析

如何在 laravel 中使用索引?

向 Laravel 查询构建器添加自定义函数

怎么MySql添加全文索引

全文搜索和角色权限