Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit 4c6b60a

Browse files
thekonzmsonowal
authored andcommitted
ensure query extension
1 parent a8f1685 commit 4c6b60a

File tree

3 files changed

+78
-10
lines changed

3 files changed

+78
-10
lines changed

src/Engines/Modes/Mode.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ abstract class Mode
99
{
1010
protected $whereParams = [];
1111

12+
/**
13+
* @var ModelService
14+
*/
1215
protected $modelService;
1316

1417
public function __construct()

src/Engines/Modes/NaturalLanguage.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,21 @@ class NaturalLanguage extends Mode
88
{
99
public function buildWhereRawString(Builder $builder)
1010
{
11-
$queryString = '';
11+
return $this->buildWheres($builder) . $this->buildMatchQuery($builder);
12+
}
13+
14+
public function buildSelectColumns(Builder $builder)
15+
{
16+
$matchQuery = $this->buildMatchQuery($builder);
1217

13-
$queryString .= $this->buildWheres($builder);
18+
return "*, $matchQuery as relevance";
19+
}
1420

21+
private function buildMatchQuery(Builder $builder)
22+
{
1523
$indexFields = implode(',', $this->modelService->setModel($builder->model)->getFullTextIndexFields());
1624

17-
$queryString .= "MATCH($indexFields) AGAINST(? IN NATURAL LANGUAGE MODE";
25+
$queryString = "MATCH($indexFields) AGAINST(? IN NATURAL LANGUAGE MODE";
1826

1927
if (config('scout.mysql.query_expansion')) {
2028
$queryString .= ' WITH QUERY EXPANSION';
@@ -25,13 +33,6 @@ public function buildWhereRawString(Builder $builder)
2533
return $queryString;
2634
}
2735

28-
public function buildSelectColumns(Builder $builder)
29-
{
30-
$indexFields = implode(',', $this->modelService->setModel($builder->model)->getFullTextIndexFields());
31-
32-
return "*, MATCH($indexFields) AGAINST(? IN NATURAL LANGUAGE MODE) AS relevance";
33-
}
34-
3536
public function buildParams(Builder $builder)
3637
{
3738
$this->whereParams[] = $builder->query;
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
4+
namespace Tests\Engines\Modes;
5+
6+
use Illuminate\Support\Facades\DB;
7+
use Laravel\Scout\Builder;
8+
use Tests\TestCase;
9+
use Tests\TestModel;
10+
use Yab\MySQLScout\Engines\Modes\NaturalLanguage;
11+
12+
class NaturalLanguageTest extends TestCase
13+
{
14+
public function testNaturalLanguage()
15+
{
16+
$this->mockDb();
17+
18+
$mode = new NaturalLanguage();
19+
$builder = new Builder(new TestModel(), __METHOD__);
20+
21+
$this->assertEquals(
22+
'*, MATCH(first_name,last_name) AGAINST(? IN NATURAL LANGUAGE MODE) as relevance',
23+
$mode->buildSelectColumns($builder)
24+
);
25+
$this->assertEquals(
26+
'MATCH(first_name,last_name) AGAINST(? IN NATURAL LANGUAGE MODE)',
27+
$mode->buildWhereRawString($builder)
28+
);
29+
$this->assertEquals([__METHOD__], $mode->buildParams($builder));
30+
}
31+
32+
public function testWithQueryExpansion()
33+
{
34+
$this->mockDb();
35+
config()->set('scout.mysql.query_expansion', true);
36+
37+
$mode = new NaturalLanguage();
38+
$builder = new Builder(new TestModel(), __METHOD__);
39+
40+
$this->assertEquals(
41+
'*, MATCH(first_name,last_name) AGAINST(? IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION) as relevance',
42+
$mode->buildSelectColumns($builder)
43+
);
44+
$this->assertEquals(
45+
'MATCH(first_name,last_name) AGAINST(? IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION)',
46+
$mode->buildWhereRawString($builder)
47+
);
48+
$this->assertEquals([__METHOD__], $mode->buildParams($builder));
49+
}
50+
51+
private function mockDb(): void
52+
{
53+
DB::shouldReceive('connection')->andReturnSelf();
54+
DB::shouldReceive('getSchemaBuilder')->andReturnSelf();
55+
DB::shouldReceive('getColumnListing')->andReturn([
56+
'first_name',
57+
'last_name',
58+
'age',
59+
]);
60+
DB::shouldReceive('select')->andReturn([
61+
(object)['Type' => 'VARCHAR'],
62+
]);
63+
}
64+
}

0 commit comments

Comments
 (0)