*/ $generateCasePermutations = function (string $word): array { $count = 2 ** mb_strlen($word); $chars = mb_str_split($word); $permutations = []; for ($i = 0; $i < $count; $i++) { $permutation = ''; foreach ($chars as $j => $char) { if ($i & (1 << $j)) { $permutation .= strtoupper($char); } else { $permutation .= strtolower($char); } } $permutations[] = $permutation; } return $permutations; }; 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", "meilisearch", "typesense", | "database", "collection", "null" | */ 'driver' => env('SCOUT_DRIVER', 'meilisearch'), /* |-------------------------------------------------------------------------- | 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), /* |-------------------------------------------------------------------------- | Database Transactions |-------------------------------------------------------------------------- | | This configuration option determines if your data will only be synced | with your search indexes after every open database transaction has | been committed, thus preventing any discarded data from syncing. | */ 'after_commit' => 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, /* |-------------------------------------------------------------------------- | Identify User |-------------------------------------------------------------------------- | | This option allows you to control whether to notify the search engine | of the user performing the search. This is sometimes useful if the | engine supports any analytics based on this application's users. | | Supported engines: "algolia" | */ 'identify' => env('SCOUT_IDENTIFY', 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', ''), ], /* |-------------------------------------------------------------------------- | Meilisearch Configuration |-------------------------------------------------------------------------- | | Here you may configure your Meilisearch settings. Meilisearch is an open | source search engine with minimal configuration. Below, you can state | the host and key information for your own Meilisearch installation. | | See: https://www.meilisearch.com/docs/learn/configuration/instance_options#all-instance-options | */ 'meilisearch' => [ 'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'), 'key' => env('MEILISEARCH_KEY'), 'index-settings' => [ App\Models\Torrent::class => [ 'searchableAttributes' => [ 'name', 'tmdb_movie.name', 'tmdb_tv.name', 'tmdb_movie.year', 'tmdb_tv.year', 'type.name', 'resolution.name', ], 'filterableAttributes' => [ [ 'attributePatterns' => [ 'id', 'name', 'folder', 'leechers', 'seeders', 'bumped_at', 'fl_until', 'du_until', 'user_id', 'imdb', 'tvdb', 'tmdb_movie_id', 'tmdb_tv_id', 'mal', 'igdb', 'season_number', 'episode_number', 'free', 'doubleup', 'refundable', 'highspeed', 'featured', 'status', 'anon', 'sticky', 'internal', 'deleted_at', 'personal_release', 'trumpable', 'info_hash', 'history_seeders.user_id', 'history_leechers.user_id', 'history_active.user_id', 'history_inactive.user_id', 'history_complete.user_id', 'history_incomplete.user_id', 'user.username', 'category.id', 'category.movie_meta', 'category.tv_meta', 'type.id', 'resolution.id', 'tmdb_movie.id', 'tmdb_movie.name', 'tmdb_movie.original_language', 'tmdb_movie.adult', 'tmdb_movie.genres.id', 'tmdb_movie.collection.id', 'tmdb_movie.companies.id', 'tmdb_movie.wishes.user_id', 'tmdb_tv.id', 'tmdb_tv.name', 'tmdb_tv.original_language', 'tmdb_tv.adult', 'tmdb_tv.genres.id', 'tmdb_tv.networks.id', 'tmdb_tv.companies.id', 'tmdb_tv.wishes.user_id', 'playlists.id', 'bookmarks.user_id', 'freeleech_tokens.user_id', 'files.name', 'keywords', 'distributor_id', 'region_id', ], "features" => [ "facetSearch" => false, "filter" => [ "equality" => true, "comparison" => false, ], ] ], [ 'attributePatterns' => [ 'size', 'times_completed', 'created_at', 'tmdb_movie.year', 'tmdb_tv.year', ], "features" => [ "facetSearch" => false, "filter" => [ "equality" => true, "comparison" => true, ], ] ], ], 'sortableAttributes' => [ 'name', 'rating', 'size', 'seeders', 'leechers', 'times_completed', 'created_at', 'bumped_at', 'sticky', ], 'rankingRules' => [ 'sort', 'attribute', 'exactness', 'words', 'typo', 'proximity', ], 'facetSearch' => false, 'proximityPrecision' => 'byAttribute', 'typoTolerance' => [ 'disableOnWords' => [ // cspell:ignore bluray 'bluray', 'blu-ray', ], ], "dictionary" => [ ...$generateCasePermutations('blu-ray'), ], ], 'people' => [ 'searchableAttributes' => [ 'name', ], 'filterableAttributes' => [ [ 'attributePatterns' => [ 'id', ], "features" => [ "facetSearch" => false, "filter" => [ "equality" => true, "comparison" => false, ], ] ], [ 'attributePatterns' => [ 'birthday', ], "features" => [ "facetSearch" => false, "filter" => [ "equality" => true, "comparison" => true, ], ] ], ], 'sortableAttributes' => [ 'name', 'birthday', ], 'rankingRules' => [ 'sort', 'attribute', 'exactness', 'words', 'typo', 'proximity', ], 'facetSearch' => false, 'proximityPrecision' => 'byAttribute', ], ], ], /* |-------------------------------------------------------------------------- | Typesense Configuration |-------------------------------------------------------------------------- | | Here you may configure your Typesense settings. Typesense is an open | source search engine using minimal configuration. Below, you will | state the host, key, and schema configuration for the instance. | */ 'typesense' => [ 'client-settings' => [ 'api_key' => env('TYPESENSE_API_KEY', 'xyz'), 'nodes' => [ [ 'host' => env('TYPESENSE_HOST', 'localhost'), 'port' => env('TYPESENSE_PORT', '8108'), 'path' => env('TYPESENSE_PATH', ''), 'protocol' => env('TYPESENSE_PROTOCOL', 'http'), ], ], 'nearest_node' => [ 'host' => env('TYPESENSE_HOST', 'localhost'), 'port' => env('TYPESENSE_PORT', '8108'), 'path' => env('TYPESENSE_PATH', ''), 'protocol' => env('TYPESENSE_PROTOCOL', 'http'), ], 'connection_timeout_seconds' => env('TYPESENSE_CONNECTION_TIMEOUT_SECONDS', 2), 'healthcheck_interval_seconds' => env('TYPESENSE_HEALTHCHECK_INTERVAL_SECONDS', 30), 'num_retries' => env('TYPESENSE_NUM_RETRIES', 3), 'retry_interval_seconds' => env('TYPESENSE_RETRY_INTERVAL_SECONDS', 1), ], 'model-settings' => [ // User::class => [ // 'collection-schema' => [ // 'fields' => [ // [ // 'name' => 'id', // 'type' => 'string', // ], // [ // 'name' => 'name', // 'type' => 'string', // ], // [ // 'name' => 'created_at', // 'type' => 'int64', // ], // ], // 'default_sorting_field' => 'created_at', // ], // 'search-parameters' => [ // 'query_by' => 'name' // ], // ], ], ], ];