From: David Balmain Date: 2005-11-14T15:09:04+09:00 Subject: [ANN] Ferret 0.2.1 (port of Apache Lucene to pure ruby) Hi Folks, I've just released version 0.2.1. Since my last announcement there have been quit a few changes, mostly to the Index::Index interface. We also have a great new logo thanks to Jan Prill. You can check it all out here; http://ferret.davebalmain.com/trac/ Dave Balmain == Description Ferret is a full port of the Java Lucene searching and indexing library. It's available as a gem so try it out! To get started quickly read the quick start at the project homepage; http://ferret.davebalmain.com/api http://ferret.davebalmain.com/api/files/TUTORIAL.html == Changes === Multifield searches You can now do multi field searches using the query parser. # search the title and content fields for ruby index.search_each("title|content:ruby") {|doc, score| puts "#{doc}:#{score}"} # search all fields for ruby index.search_each("*:ruby") {|doc, score| puts "#{doc}:#{score}"} === Compound file support and Apache Lucene index reading You can now store your index in compound files which reduces the number of files used by the index. This is useful as your index gets bigger to prevent a too many files open index. It is also handy for reading Apache Lucene indexes as Apache Lucene uses compound file format by default. === Merging indexes You can now merge two or more existing indexes into one. The is useful if you want to have indexers working in parallel to create your index and then merge all the indexes together create one final index. # add indexes 1 to 10 to the final index index.add_indexes([index1, index2, ... , index10]) === Persisting in Memory index. You can gain a little in performance by using an in memory index for your indexing and then persisting it to your file system when you are finished. index = Index::Index.new() # do all your indexing index.persist("/path/to/your/index/directory") === Thread safety Ferret is now threadsafe so feel safe to use it in a multithreaded environment. Check out the thread tests in the test/functional directory in the latest distribution. === Easy update and delete You can now use a query to do a delete; index.query_delete("content:java or content:perl") And you can now easily update documents; index.update(34, doc) index.query_update('author:"David Balmain"', {:author => "Dave Balmain"}) === Primary Key The latest addition is a primary key to the index. Note that this only works through the Index::Index class and should only be used if you know what you are doing. index = Index::Index.new(:key => ["id", "table"]) index << {:id => 1123, :table => "product", :product = "Jacket"} # ... # The following will replace the Jacket product with a t-shirt index << {:id => 1123, :table => "product", :product = "T-Shirt"} Have fun and let me know what you think.