From e2e3842cd00703ce9fa8dfb501145a36b3d61f82 Mon Sep 17 00:00:00 2001 From: lexx Date: Sun, 22 Oct 2023 16:09:36 +0300 Subject: [PATCH] search index --- front/js/svelte/content/tools/Tools.svelte | 8 +---- ...2023_10_22_152122_generatedIndexColumn.php | 36 +++++++++++++++++++ src/Http/Controller/RecordController.php | 1 - src/Query/FilterParser.php | 2 +- src/Query/Query.php | 1 - src/Record/Record.php | 4 ++- src/Record/RecordRepo.php | 1 + 7 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 src/Database/migrations/2023_10_22_152122_generatedIndexColumn.php diff --git a/front/js/svelte/content/tools/Tools.svelte b/front/js/svelte/content/tools/Tools.svelte index c99b639..1dffb62 100644 --- a/front/js/svelte/content/tools/Tools.svelte +++ b/front/js/svelte/content/tools/Tools.svelte @@ -69,14 +69,8 @@ />
- {#if schema.fields[0]?.name} - - {:else} - - {/if} -
diff --git a/src/Database/migrations/2023_10_22_152122_generatedIndexColumn.php b/src/Database/migrations/2023_10_22_152122_generatedIndexColumn.php new file mode 100644 index 0000000..f3a5a48 --- /dev/null +++ b/src/Database/migrations/2023_10_22_152122_generatedIndexColumn.php @@ -0,0 +1,36 @@ +text('search')->default(""); + $table->index('search'); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('records', function (Blueprint $table) { + $table->dropColumn('search'); + $table->dropIndex('search'); + }); + } +}; diff --git a/src/Http/Controller/RecordController.php b/src/Http/Controller/RecordController.php index c54597a..a07480d 100644 --- a/src/Http/Controller/RecordController.php +++ b/src/Http/Controller/RecordController.php @@ -214,7 +214,6 @@ class RecordController extends Controller ->parentsLimit(100) ->run(); - if ($graph->records->isEmpty()) { return $this->svelte->render( layout: "channel", diff --git a/src/Query/FilterParser.php b/src/Query/FilterParser.php index 6df859f..d2cc2fd 100644 --- a/src/Query/FilterParser.php +++ b/src/Query/FilterParser.php @@ -49,7 +49,7 @@ final class FilterParser "eqfalse" => false, "netrue" => true, "nefalse" => false, - "regex" => "%{$value}%", + "regex" => "%" . strtolower($value) . "%", "gt" => is_numeric($value) ? floatval($value) : $value, "gte" => is_numeric($value) ? floatval($value) : $value, "lt" => is_numeric($value) ? floatval($value) : $value, diff --git a/src/Query/Query.php b/src/Query/Query.php index eeccab5..92f8a6f 100644 --- a/src/Query/Query.php +++ b/src/Query/Query.php @@ -148,7 +148,6 @@ final class Query } $query = $this->orderByQuery($query); - return $query->get()->map(function ($r) { $r->isRoot = true; return $r; diff --git a/src/Record/Record.php b/src/Record/Record.php index 962e781..c2acacb 100644 --- a/src/Record/Record.php +++ b/src/Record/Record.php @@ -4,6 +4,7 @@ namespace Lucent\Record; use JsonSerializable; use stdClass; +use Illuminate\Support\Str; class Record implements JsonSerializable { @@ -23,6 +24,7 @@ class Record implements JsonSerializable public function toDB(): array { + $searchIndex = trim(Str::lower(collect($this->data)->values()->join(" ")." ". $this->_file?->originalName ?? "")); return [ "id" => $this->id, "status" => $this->status->value, @@ -30,6 +32,7 @@ class Record implements JsonSerializable "_sys" => json_encode($this->_sys), "_file" => json_encode($this->_file), "data" => json_encode($this->data), + "search" => $searchIndex, ]; } @@ -61,5 +64,4 @@ class Record implements JsonSerializable } - } diff --git a/src/Record/RecordRepo.php b/src/Record/RecordRepo.php index a36ceb4..34b4ec1 100644 --- a/src/Record/RecordRepo.php +++ b/src/Record/RecordRepo.php @@ -13,6 +13,7 @@ class RecordRepo public static function create(Record $record): void { $recordToDB = $record->toDB(); + DB::table("records")->insert($recordToDB); }