Fulltext search

Jake Varghese edited this page Feb 27, 2014 · 5 revisions

About fulltext search

Fulltext search in Sunspot uses Solr's dismax handler. The dismax handler is designed for parsing user-entered search phrases, and provides a good balance between functionality and error-proofing. A small subset of the normal boolean query syntax is parsed: in particular, well-matched quotation marks can be used to demarcate phrases, and the + and - operators can be used to require or exclude words respectively. All other Solr boolean syntax is escaped, and non-well-matched quotation marks are ignored. This is fairly consistent with the functionality users are accustomed to with search on the web and elsewhere.

Using fulltext search

Initiating a fulltext search is as simple as calling the keywords method inside a search block:

Sunspot.search(Post) do
  keywords 'great pizza'

The above search will return all documents where the words "great" and "pizza" appear somewhere in the fields indexed as text. Note that the keywords method should not be called multiple times in one search - successive calls will overwrite the previously specified keywords.

By default, fulltext search is performed against the union of all of the text fields configured for all of the classes under search. To specify which fields you'd like to search, pass the :fields option:

Sunspot.search(Post) do
  keywords 'great pizza', :fields => [:title, :body]

To request highlights to be returned with the search, use the :highlight option:

Sunspot.search(Post) do
  keywords 'great pizza', :highlight => true

Note that for highlighting to work, the desired fields have to be set up with :stored => true.

For all possible options, see "the API documentation":http://sunspot.github.com/sunspot/docs/Sunspot/DSL/StandardQuery.html.