Searches Configuration

floere edited this page Jul 29, 2012 · 7 revisions


Indexes alone cannot be searched. You need a Search object and give it all indexes you want to search:*indexes_to_search)


Searches operate on Indexes.

books_index = :books do
  # ...

books = books_index 'test'

Multiple Indexes

You can search over an arbitrary number of indexes. Say, you have multiple indexes, one for books, one for dvds, one for music. You can combine them to search through them all with a single query!

books_index = index # ...
dvd_index   = index # ...
music_index = index # ...

books = books_index, dvd_index, music_index 'test'

This will return results found in all three indexes.


Apart from a list of indexes, searches take options in their options block.

The options are currently:

  • boost(hash_or_object): Define a number of combinations that should receive positive or negative weights (see example below).
  • searching(options_or_tokenizer): The Tokenizer Options to use. Either pass in a hash or an object that responds to tokenize(text) and returns [ [token1, token2], [original1, original2] ].
  • max_allocations(amount): The maximum number of allocations to calculate.
  • terminate_early(extra_allocations = 0): Only calculate enough allocations for the ids. Good for when you just need the result ids and want to speed up the search a little.
  • ignore_unassigned_tokens: If a token cannot be assigned to a category, simply ignore it. As opposed to returning 0 results because the one token cannot be found in any category.

Call them as methods in the block:

books = books_index do
  searching splits_text_on: /\s\_/,
            max_words: 4

weights option

books = books_index do
  boost [:author]          => 6, # Eg. 'Goethe'. Note that this only boosts on a single word.
        [:title, :author]  => 5, # Eg. 'hobbit tolkien'
        [:author, :year]   => 2  # Eg. 'orwell 1948'

Giving [:author] => 6 means that if results are found where Picky thinks that one or all search terms are in the title, it is weighed by 6 (a lot) higher.

[:title, :author] => 5 will add 5 to the weight, if Picky finds a title followed by an author, e.g. “ulysses joyce”. If it finds an author followed by a title, 5 points will not be added.

The order is important!

So for example you can give more weight to [:street, :streetnumber], but subtract points for [:streetnumber, :street], an unlikely order of search terms.