2
votes

I just installed this package (laravel-scout-tntsearch-driver) and when using the search() method, I am getting the following error: PDOException with message 'SQLSTATE[HY000] [2002] Connection refused'

Running the command docker exec -it desk_php php artisan scout:import App\\Models\\TicketMessage result in:

Imported [App\Models\TicketMessage] models up to ID: 6
All [App\Models\TicketMessage] records have been imported.

After, I try to run the search in a tinker session and if fails with the Connection refused message.

docker exec -it desk_php php artisan tinker                                 
Psy Shell v0.9.12 (PHP 7.4.3 — cli) by Justin Hileman
>>> TicketMessage::search('test')->get()
PDOException with message 'SQLSTATE[HY000] [2002] Connection refused'

Here is my scout config file:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Search Engine
    |--------------------------------------------------------------------------
    |
    | This option controls the default search connection that gets used while
    | using Laravel Scout. This connection is used when syncing all models
    | to the search service. You should adjust this based on your needs.
    |
    | Supported: "algolia", "null"
    |
    */

    'driver' => env('SCOUT_DRIVER', 'algolia'),

    /*
    |--------------------------------------------------------------------------
    | Index Prefix
    |--------------------------------------------------------------------------
    |
    | Here you may specify a prefix that will be applied to all search index
    | names used by Scout. This prefix may be useful if you have multiple
    | "tenants" or applications sharing the same search infrastructure.
    |
    */

    'prefix' => env('SCOUT_PREFIX', ''),

    /*
    |--------------------------------------------------------------------------
    | Queue Data Syncing
    |--------------------------------------------------------------------------
    |
    | This option allows you to control if the operations that sync your data
    | with your search engines are queued. When this is set to "true" then
    | all automatic data syncing will get queued for better performance.
    |
    */

    'queue' => env('SCOUT_QUEUE', false),

    /*
    |--------------------------------------------------------------------------
    | Chunk Sizes
    |--------------------------------------------------------------------------
    |
    | These options allow you to control the maximum chunk size when you are
    | mass importing data into the search engine. This allows you to fine
    | tune each of these chunk sizes based on the power of the servers.
    |
    */

    'chunk' => [
        'searchable' => 500,
        'unsearchable' => 500,
    ],

    /*
    |--------------------------------------------------------------------------
    | Soft Deletes
    |--------------------------------------------------------------------------
    |
    | This option allows to control whether to keep soft deleted records in
    | the search indexes. Maintaining soft deleted records can be useful
    | if your application still needs to search for the records later.
    |
    */

    'soft_delete' => false,

    /*
    |--------------------------------------------------------------------------
    | Algolia Configuration
    |--------------------------------------------------------------------------
    |
    | Here you may configure your Algolia settings. Algolia is a cloud hosted
    | search engine which works great with Scout out of the box. Just plug
    | in your application ID and admin API key to get started searching.
    |
    */

    'algolia' => [
        'id' => env('ALGOLIA_APP_ID', ''),
        'secret' => env('ALGOLIA_SECRET', ''),
    ],

    /*
    |--------------------------------------------------------------------------
    | TntSearch Configuration
    |--------------------------------------------------------------------------
    */

    'tntsearch' => [
        'storage'  => storage_path(), //place where the index files will be stored
        'fuzziness' => env('TNTSEARCH_FUZZINESS', false),
        'fuzzy' => [
            'prefix_length' => 2,
            'max_expansions' => 50,
            'distance' => 2
        ],
        'asYouType' => false,
        'searchBoolean' => env('TNTSEARCH_BOOLEAN', false),
    ],

];

Relevant .env settings

SCOUT_DRIVER=tntsearch
SCOUT_QUEUE=true

Any idea what I could be missing?

EDIT

Here is more details about what I have done.

I have installed the required SqLite extension and enabled it. I have added both Scout and Tnt to the providers array in the proper order. (Scout first)

After I run the import command, I noticed there is no index files generated in storage even if command show a success message.

1
Did you install PDO and PDO MySQL (they aren't installed by default in Laravel)? Are you using the correct ports? Did you add the ScoutServiceProvider and the TNTSearchScoutServiceProvider to providers in config/app.php?Tiago Martins Peres
I have edited my question to provide more information. I don't know which port you are referring to as the installation instructions of the package does not mention any db connection to configure. I have installed the pdo, mysql and sqlite extension and I have added the scout and tnt to the provider array.naghal

1 Answers

0
votes

From your comment I understand you have yet to configure Laravel to use SQLite by changing the default database setup.

In your config/database.php,

'default' => env('DB_CONNECTION', 'sqlite'),

(...)

'connections' => [
        'sqlite' => [
            'driver' => 'sqlite',
            'database' => storage_path('database.sqlite'),
            'prefix' => '',
        ],

Then, in your .env file you must change the DB_CONNECTION to DB_CONNECTION=sqlite.

In the end, to create the file,

touch database.sqlite