Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace Fuse.js with Algolia for home user search #72

Merged
merged 5 commits into from Apr 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.example
Expand Up @@ -46,3 +46,8 @@ BACKUP_DROPBOX_ACCESS_TOKEN=
BACKUP_ARCHIVE_PASSWORD=

TRUSTED_PROXIES=

SCOUT_PREFIX=
ALGOLIA_APP_ID=
ALGOLIA_SEARCH_KEY=
ALGOLIA_SECRET=
170 changes: 170 additions & 0 deletions algolia/scout-local-users.php
@@ -0,0 +1,170 @@
<?php

return [

/*
|--------------------------------------------------------------------------
| Searchable Attributes
|--------------------------------------------------------------------------
|
| Limits the scope of a search to the attributes listed in this setting. Defining
| specific attributes as searchable is critical for relevance because it gives
| you direct control over what information the search engine should look at.
|
| Supported: Null, Array
| Example: ["name", "email", "unordered(city)"]
|
*/

'searchableAttributes' => ['name', 'display_name'],

/*
|--------------------------------------------------------------------------
| Custom Ranking
|--------------------------------------------------------------------------
|
| Custom Ranking is about leveraging business metrics to effectively rank search
| results - it's crucial for any successful search experience. Make sure that
| only "numeric" attributes are used, such as the number of sales or views.
|
| Supported: Null, Array
| Examples: ['desc(comments_count)', 'desc(views_count)']
|
*/

'customRanking' => null,

/*
|--------------------------------------------------------------------------
| Remove Stop Words
|--------------------------------------------------------------------------
|
| Stop word removal is useful when you have a query in natural language, e.g.
| “what is a record?”. In that case, the engine will remove “what”, “is”,
| before executing the query, and therefore just search for “record”.
|
| Supported: Null, Boolean, Array
|
*/

'removeStopWords' => null,

/*
|--------------------------------------------------------------------------
| Disable Typo Tolerance
|--------------------------------------------------------------------------
|
| Algolia provides robust "typo-tolerance" out-of-the-box. This parameter accepts an
| array of attributes for which typo-tolerance should be disabled. This is useful,
| for example, products that might require SKU search without "typo-tolerance".
|
| Supported: Null, Array
| Example: ['id', 'sku', 'reference', 'code']
|
*/

'disableTypoToleranceOnAttributes' => null,

/*
|--------------------------------------------------------------------------
| Attributes For Faceting
|--------------------------------------------------------------------------
|
| Your index comes with no categories. By designating an attribute as a facet, this enables
| Algolia to compute a set of possible values that can later be used to create categories
| or filters. You can also get a count of records that match those values.
|
| Supported: Null, Array
| Example: ['type', 'filterOnly(country)', 'searchable(city)',]
|
*/

'attributesForFaceting' => null,

/*
|--------------------------------------------------------------------------
| Unretrievable Attributes
|--------------------------------------------------------------------------
|
| This is particularly important for security or business reasons, where some attributes are
| used only for ranking or other technical purposes, but should never be seen by your end
| users, such as: total_sales, permissions, stock_count, and other private information.
|
| Supported: Null, Array
| Example: ['total_sales', 'permissions', 'stock_count',]
|
*/

'unretrievableAttributes' => null,

/*
|--------------------------------------------------------------------------
| Ignore Plurals
|--------------------------------------------------------------------------
|
| Treats singular, plurals, and other forms of declensions as matching terms. When
| enabled, will make the engine consider “car” and “cars”, or “foot” and “feet”,
| equivalent. This is used in conjunction with the "queryLanguages" setting.
|
| Supported: Null, Boolean, Array
|
*/

'ignorePlurals' => null,

/*
|--------------------------------------------------------------------------
| Query Languages
|--------------------------------------------------------------------------
|
| Sets the languages to be used by language-specific settings such as
| "removeStopWords" or "ignorePlurals". For optimum relevance, it is
| recommended to only enable languages that are used in your data.
|
| Supported: Null, Array
| Example: ['en', 'fr',]
|
*/

'queryLanguages' => ['en'],

/*
|--------------------------------------------------------------------------
| Distinct
|--------------------------------------------------------------------------
|
| Using this attribute, you can limit the number of returned records that contain the same
| value in that attribute. For example, if the distinct attribute is the series_name and
| several hits (Episodes) have the same value for series_name (Laravel From Scratch).
|
| Supported(distinct): Boolean
| Supported(attributeForDistinct): Null, String
| Example(attributeForDistinct): 'slug'
*/

'distinct' => null,
'attributeForDistinct' => null,

/*
|--------------------------------------------------------------------------
| Other Settings
|--------------------------------------------------------------------------
|
| The easiest way to manage your settings is usually to go to your Algolia dashboard because
| it has a nice UI and you can test the relevancy directly there. Once you fine-tuned your
| configuration, just use the command `scout:sync` to get remote settings in this file.
|
*/
'allowTyposOnNumericTokens' => false,
'exactOnSingleWordQuery' => 'word',
'ranking' => [
'exact',
'typo',
'geo',
'words',
'filters',
'proximity',
'attribute',
'custom',
],
];
170 changes: 170 additions & 0 deletions algolia/scout-prod-users.php
@@ -0,0 +1,170 @@
<?php

return [

/*
|--------------------------------------------------------------------------
| Searchable Attributes
|--------------------------------------------------------------------------
|
| Limits the scope of a search to the attributes listed in this setting. Defining
| specific attributes as searchable is critical for relevance because it gives
| you direct control over what information the search engine should look at.
|
| Supported: Null, Array
| Example: ["name", "email", "unordered(city)"]
|
*/

'searchableAttributes' => ['name', 'display_name'],

/*
|--------------------------------------------------------------------------
| Custom Ranking
|--------------------------------------------------------------------------
|
| Custom Ranking is about leveraging business metrics to effectively rank search
| results - it's crucial for any successful search experience. Make sure that
| only "numeric" attributes are used, such as the number of sales or views.
|
| Supported: Null, Array
| Examples: ['desc(comments_count)', 'desc(views_count)']
|
*/

'customRanking' => null,

/*
|--------------------------------------------------------------------------
| Remove Stop Words
|--------------------------------------------------------------------------
|
| Stop word removal is useful when you have a query in natural language, e.g.
| “what is a record?”. In that case, the engine will remove “what”, “is”,
| before executing the query, and therefore just search for “record”.
|
| Supported: Null, Boolean, Array
|
*/

'removeStopWords' => null,

/*
|--------------------------------------------------------------------------
| Disable Typo Tolerance
|--------------------------------------------------------------------------
|
| Algolia provides robust "typo-tolerance" out-of-the-box. This parameter accepts an
| array of attributes for which typo-tolerance should be disabled. This is useful,
| for example, products that might require SKU search without "typo-tolerance".
|
| Supported: Null, Array
| Example: ['id', 'sku', 'reference', 'code']
|
*/

'disableTypoToleranceOnAttributes' => null,

/*
|--------------------------------------------------------------------------
| Attributes For Faceting
|--------------------------------------------------------------------------
|
| Your index comes with no categories. By designating an attribute as a facet, this enables
| Algolia to compute a set of possible values that can later be used to create categories
| or filters. You can also get a count of records that match those values.
|
| Supported: Null, Array
| Example: ['type', 'filterOnly(country)', 'searchable(city)',]
|
*/

'attributesForFaceting' => null,

/*
|--------------------------------------------------------------------------
| Unretrievable Attributes
|--------------------------------------------------------------------------
|
| This is particularly important for security or business reasons, where some attributes are
| used only for ranking or other technical purposes, but should never be seen by your end
| users, such as: total_sales, permissions, stock_count, and other private information.
|
| Supported: Null, Array
| Example: ['total_sales', 'permissions', 'stock_count',]
|
*/

'unretrievableAttributes' => null,

/*
|--------------------------------------------------------------------------
| Ignore Plurals
|--------------------------------------------------------------------------
|
| Treats singular, plurals, and other forms of declensions as matching terms. When
| enabled, will make the engine consider “car” and “cars”, or “foot” and “feet”,
| equivalent. This is used in conjunction with the "queryLanguages" setting.
|
| Supported: Null, Boolean, Array
|
*/

'ignorePlurals' => null,

/*
|--------------------------------------------------------------------------
| Query Languages
|--------------------------------------------------------------------------
|
| Sets the languages to be used by language-specific settings such as
| "removeStopWords" or "ignorePlurals". For optimum relevance, it is
| recommended to only enable languages that are used in your data.
|
| Supported: Null, Array
| Example: ['en', 'fr',]
|
*/

'queryLanguages' => ['en'],

/*
|--------------------------------------------------------------------------
| Distinct
|--------------------------------------------------------------------------
|
| Using this attribute, you can limit the number of returned records that contain the same
| value in that attribute. For example, if the distinct attribute is the series_name and
| several hits (Episodes) have the same value for series_name (Laravel From Scratch).
|
| Supported(distinct): Boolean
| Supported(attributeForDistinct): Null, String
| Example(attributeForDistinct): 'slug'
*/

'distinct' => null,
'attributeForDistinct' => null,

/*
|--------------------------------------------------------------------------
| Other Settings
|--------------------------------------------------------------------------
|
| The easiest way to manage your settings is usually to go to your Algolia dashboard because
| it has a nice UI and you can test the relevancy directly there. Once you fine-tuned your
| configuration, just use the command `scout:sync` to get remote settings in this file.
|
*/
'allowTyposOnNumericTokens' => false,
'exactOnSingleWordQuery' => 'word',
'ranking' => [
'exact',
'typo',
'geo',
'words',
'filters',
'proximity',
'attribute',
'custom',
],
];
4 changes: 4 additions & 0 deletions app/Console/Kernel.php
Expand Up @@ -2,6 +2,7 @@

namespace App\Console;

use Algolia\ScoutExtended\Console\Commands\ReImportCommand;
use App\Console\Commands\GithubOrganizationDetails;
use App\Console\Commands\GithubOrganizationRepositories;
use App\Console\Commands\GithubRepositoryContributors;
Expand Down Expand Up @@ -33,6 +34,9 @@ protected function schedule(Schedule $schedule): void
// laravel/horizon
$schedule->command(SnapshotCommand::class)->everyFiveMinutes()->onOneServer()->environments('gorgeous-moon');

// laravel/scout
$schedule->command(ReImportCommand::class)->dailyAt('02:00')->onOneServer();

// spatie/laravel-schedule-monitor
$schedule->command(CleanLogCommand::class)->dailyAt('01:00')->onOneServer();

Expand Down
2 changes: 2 additions & 0 deletions app/Http/Policies/ContentSecurityPolicy.php
Expand Up @@ -18,6 +18,8 @@ public function configure(): void
->addDirective(Directive::CHILD, Keyword::NONE)
->addDirective(Directive::CONNECT, Keyword::SELF)
->addDirective(Directive::CONNECT, 'https://plausible.io/api/event')
->addDirective(Directive::CONNECT, 'https://*.algolia.net')
->addDirective(Directive::CONNECT, 'https://*.algolianet.com')
->addDirective(Directive::FORM_ACTION, Keyword::SELF)
->addDirective(Directive::FRAME, Keyword::NONE)
->addDirective(Directive::FRAME_ANCESTORS, Keyword::NONE)
Expand Down