如何创建列的全文索引?

sta*_*ack 6 php mysql laravel

这是我目前的迁移:

class News extends Migration
{
    public function up()
    {
        Schema::create('News', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('description');
            $table->integer('user_id')->unsigned()->index();
            $table->string('imgPath')->nullable();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('News');
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要分别在这些列上创建一个全文索引:title description.所以我正在寻找这样的事情:->fulltext().但是我在Laravel文档中找不到类似的东西.

无论如何,

  1. 如何在迁移中的单个列上创建全文索引?喜欢:(title)
  2. 另外,对于我的信息,如何在迁移中的多个列上创建复合全文索引?喜欢:(title, description)

注意:我想要一个允许我像这样搜索的intex:. . . match(col) against('value')

Ami*_*pta 13

Laravel不支持FULLTEXT搜索.但您可以使用原始查询:

DB::statement('ALTER TABLE News ADD FULLTEXT search(title, description)');
Run Code Online (Sandbox Code Playgroud)

注意 - 如果您不使用MySQL 5.6+,我们必须将数据库引擎设置为MyISAM而不是InnoDB.

$table->engine = 'MyISAM'; // means you can't use foreign key constraints
Run Code Online (Sandbox Code Playgroud)

对于搜索,您可以这样做:

$q = Input::get('query');

->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)", array($q))
Run Code Online (Sandbox Code Playgroud)

  • 这不是Mysql特定的https://docs.microsoft.com/en-us/sql/t-sql/statements/create-fulltext-index-transact-sql (2认同)

Kha*_*eal 12

Laravel 9+现在完全支持全文索引。要定义完整索引列,请使用以下命令

$table->fullText('body');
Run Code Online (Sandbox Code Playgroud)

您还可以在查询中使用whereFullText

User::whereFullText('body', 'john doe')->get();
Run Code Online (Sandbox Code Playgroud)

注意:Laravel 8+ 支持全文索引,但没有Where 子句选项