The first step to installing Xapian is to download the latest version of xapian-core and extract:
curl -O http://oligarchy.co.uk/xapian/1.0.10/xapian-core-1.0.10.tar.gz
tar -xzvf xapian-core-1.0.10.tar.gz
tar -xzvf xapian-core-1.0.10.tar.gz
From here, we need to configure and build the Xapian library:
cd xapian-core-1.0.10
./configure
make
sudo make install
./configure
make
sudo make install
Once this is complete, we need to download the Xapian bindings, which will let Xapian interact with Ruby, PHP and other scripting languages:
curl -O http://oligarchy.co.uk/xapian/1.0.10/xapian-bindings-1.0.10.tar.gz
tar -xzvf xapian-bindings-1.0.10.tar.gz
tar -xzvf xapian-bindings-1.0.10.tar.gz
Again, now that we have downloaded them, we need to configure and build the Xapian-bindings:
cd xapian-bindings-1.0.10
./configure
make
sudo make install
./configure
make
sudo make install
Once that finishes, Xapian will be installed on your system. Of course, these instructions are for installing from source. If you are using a system that has aptitude installed, or another package manager, you can also install Xapian that way. For example, to install Xapian using aptitude:
aptitude search xapian
You need the following two files to complete the install:
libxapian15 - search engine library
libxapian-ruby1.8 - xapian search engine inferface for Ruby 1.8
Finally, simply enter the following commands to install the necessary components:
sudo aptitude install libxapian15
sudo aptitude install libxapian-ruby1.8
or
sudo apt-get install libxapian15 libxapian-ruby1.8
sudo aptitude install libxapian-ruby1.8
or
sudo apt-get install libxapian15 libxapian-ruby1.8
For more detailed instructions, visit http://xapian.org/docs/install.html.
Installing the acts_as_xapian Rails plugin
script/plugin install git://github.com/frabcus/acts_as_xapian.git vendor/plugins/acts_as_xapian
Once the plugin is installed, run the migrations to add the required tables to your database:
script/generate acts_as_xapian
rake db:migrate
rake db:migrate
Setting Up The Models Code
To include fields to your index, you will need to add an “acts_as_xapian” call to the model you want to index.
class Lesson < ActiveRecord::Base
acts_as_xapian :texts => [:name, :description]
end
acts_as_xapian :texts => [:name, :description]
end
In this case, only the data found in the “name” and “description” attributes of our Lesson model will be searched.
Building and Updating the Xapian Indexes
Xapian indexing takes place “offline,” which means that the index is not automatically updated after a model/database is changed. While this may change in the future, currently the index must be built and updated periodically by you, or using a cron job (See Crontab Reference).
At this point, you can quickly test that your Xapian install, plugin, and model code are all working together via the following rake commands:
To build the index:
rake xapian:rebuild_index models="Post"
** do cron job for rebuild_index for automatically updated after a model/database is changed
** if you have more than 1 model to build the index, rake xapian:rebuild_index models="ModelName1 ModelName2"
eg: rake xapian:rebuild_index models="Post Lesson"
To update index:
rake xapian:update_index
To test index:
rake xapian:query models="Post" query="golf"
rake xapian:rebuild_index models="Post"
** do cron job for rebuild_index for automatically updated after a model/database is changed
** if you have more than 1 model to build the index, rake xapian:rebuild_index models="ModelName1 ModelName2"
eg: rake xapian:rebuild_index models="Post Lesson"
To update index:
rake xapian:update_index
To test index:
rake xapian:query models="Post" query="golf"
In controller.rb
query = 'software'
Basic Search:
search = ActsAsXapian::Search.new([Post], query, :limit => 15)
@posts = search.results.collect {|p| p[:model]}
Similar Results:
similar = ActsAsXapian::Similar.new([Post], @posts, :limit => 15)
@similar_posts = similar.results.collect {|p| p[:model]}
Basic Search:
search = ActsAsXapian::Search.new([Post], query, :limit => 15)
@posts = search.results.collect {|p| p[:model]}
Similar Results:
similar = ActsAsXapian::Similar.new([Post], @posts, :limit => 15)
@similar_posts = similar.results.collect {|p| p[:model]}
In views.html.erb
<% for post in @posts %>
<%= post.name%><br>
<% end %>
<%= post.name%><br>
<% end %>
Related Link:
http://github.com/frabcus/acts_as_xapian
http://terra-firma-design.com
http://locomotivation.squeejee.com
http://groups.google.com/group/acts_as_xapian
http://factore.ca/
http://blog.mattenoble.com/
Pagination - http://railsdog.com/
No comments:
Post a Comment