Skip to content

Commit

Permalink
Added search name weighting. Closes #27.
Browse files Browse the repository at this point in the history
  • Loading branch information
ssddanbrown committed Dec 5, 2015
1 parent c32d70a commit 46c905d
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 9 deletions.
18 changes: 9 additions & 9 deletions app/Entity.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,20 +134,20 @@ public static function fullTextSearch($fieldsToSearch, $terms, $wheres = [])
$termString .= $term . '* ';
}
$fields = implode(',', $fieldsToSearch);
$search = static::whereRaw('MATCH(' . $fields . ') AGAINST(? IN BOOLEAN MODE)', [$termString]);
$termStringEscaped = \DB::connection()->getPdo()->quote($termString);
$search = static::addSelect(\DB::raw('*, MATCH(name) AGAINST('.$termStringEscaped.' IN BOOLEAN MODE) AS title_relevance'));
$search = $search->whereRaw('MATCH(' . $fields . ') AGAINST(? IN BOOLEAN MODE)', [$termString]);

// Add additional where terms
foreach ($wheres as $whereTerm) {
$search->where($whereTerm[0], $whereTerm[1], $whereTerm[2]);
}

if (!static::isA('book')) {
$search = $search->with('book');
}

if (static::isA('page')) {
$search = $search->with('chapter');
}
// Load in relations
if (!static::isA('book')) $search = $search->with('book');
if (static::isA('page')) $search = $search->with('chapter');

return $search->get();
return $search->orderBy('title_relevance', 'desc')->get();
}

/**
Expand Down
37 changes: 37 additions & 0 deletions database/migrations/2015_12_05_145049_fulltext_weighting.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class FulltextWeighting extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE pages ADD FULLTEXT name_search(name)');
DB::statement('ALTER TABLE books ADD FULLTEXT name_search(name)');
DB::statement('ALTER TABLE chapters ADD FULLTEXT name_search(name)');
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('pages', function(Blueprint $table) {
$table->dropIndex('name_search');
});
Schema::table('books', function(Blueprint $table) {
$table->dropIndex('name_search');
});
Schema::table('chapters', function(Blueprint $table) {
$table->dropIndex('name_search');
});
}
}

0 comments on commit 46c905d

Please sign in to comment.