The index name will be automatically deduced from the class name. You can customize the index name
by passing a string to the
1 2 3 4 5 6 7 class Contact < ActiveRecord::Base include AlgoliaSearch algoliasearch index_name: "MyCustomName" do attribute :first_name, :last_name, :email end end
In most cases, you’ll have your production indices and you development indices under the same Algolia app.
To make sure you don’t modify your production data while developing, this gem can automatically suffix the
index name with the current Rails environment, turning the
Contact index to
It’s also highly recommended to use API keys with index restrictions. For instance, when developing, you would
use a key that can only write on indices with names ending in
_development.tmp. The tmp
index is required when using atomic reindexing.
This restriction will make it impossible to write on your production index.
1 2 3 4 5 6 7 class Contact < ActiveRecord::Base include AlgoliaSearch algoliasearch per_environment: true do attribute :first_name, :last_name, :email end end
Algolia offers many settings to fine-tune your search. You can find
all the available settings in our documentation.
Settings will either help with relevance or with displaying results. This gem lets you set all your index settings
This page will show some common use cases like faceting or distinct.
If you don’t want to spend time going over all the settings yet, it’s highly recommended to at least set
customRanking settings. Those two will already improve relevancy a lot
by reflecting record popularity and ignoring technical attributes (like image URLs or dates).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Product < ActiveRecord::Base include AlgoliaSearch algoliasearch do # list of attribute used to build an Algolia record attributes :title, :subtitle, :description, :likes_count, :thumbnail_url, :release_date # the `searchableAttributes` (formerly known as attributesToIndex) setting defines the attributes # you want to search in: here `title`, `subtitle` & `description`. # You need to list them by order of importance. `description` is tagged as # `unordered` to avoid taking the position of a match into account in that attribute. searchableAttributes ['title', 'subtitle', 'unordered(description)'] # the `customRanking` setting defines the ranking criteria use to compare two matching # records in case their text-relevance is equal. It should reflect your record popularity. customRanking ['desc(likes_count)'] end end
If you intend to do filtering or faceting,
you must register the necessary attributes in the settings, under
attributesForFaceting. To be so fast, Algolia
computes a lot of things at indexing time, rather than query time, so the engine must know in advance what will be used for filtering
If you have a lot of facet values, you can even make a facet searchable (like categories in the following example).
In the same vein, you may want to look at
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Product < ActiveRecord::Base include AlgoliaSearch algoliasearch do # list of attribute used to build an Algolia record attributes :title, :subtitle, :likes_count, :ratings, :categories, :features, :sizes # ... Other settings removed for brevity attributesForFaceting ['searchable(categories)', 'features', 'sizes'] numericAttributesForFiltering ['likes_count', 'equalOnly(ratings)'] end end
Currently, this gem only support regular synonyms where all words are mutually equivalent: “Pants” = “trousers” and “trousers” = “pants”.
1 2 3 4 5 6 7 8 9 10 class Contact < ActiveRecord::Base include AlgoliaSearch algoliasearch do attributes :first_name, :email synonyms [ ['bob', 'bobby' 'robert'] ] end end