Hi, I''m trying to use highlight ferret method with trunk aaf and 0.10.1 ferret. In my search display I use: Myindexedclass.ferret_index.searcher.highlight(@query, result_line.id, :content) * searcher is a protected method; how can I access to the searcher from aaf ? * is the doc id in aaf the same as my model id ? * is the first param, query, the string query or the query object ? Jean-Christophe Michel -- symetrie.com Better Nested Set for rails: http://opensource.symetrie.com/trac/better_nested_set
On 9/3/06, Jean-Christophe Michel <jc.michel at symetrie.com> wrote:> Hi, > > I''m trying to use highlight ferret method with trunk aaf and 0.10.1 > ferret. > In my search display I use: > > Myindexedclass.ferret_index.searcher.highlight(@query, result_line.id, > :content) > > * searcher is a protected method; how can I access to the searcher from > aaf ?I''ve added a highlight method to Ferret::Index::Index so you''ll be able to use it now.> * is the doc id in aaf the same as my model id ?No, but (I''m pretty sure) the model id is automatically stored in the :id field in each document.> * is the first param, query, the string query or the query object ?As with all Index methods, Index#highlight takes a string or a Query object. The Searcher#highlight method however only takes Query objects. Note also that you must specify the field to highlight when using Searcher#highlight however the default_field is used for Index#highlight unless specified otherwise. Cheers, Dave
Hi Dave, Le 3 sept. 06, ? 15:26, David Balmain a ?crit :> I''ve added a highlight method to Ferret::Index::Index so you''ll be > able to use it now.Thanks. Trying to use this, I updated to 0.10.2 gem. But I cannot get highlight return something else than nil. I suspect highly the doc id not always being my indexed class id, though aaf code seems to create docs with Model.id :/ I tried to do i.search ''rare_word'' Mymodel.find result-id # contains no such word i.highlight(''rare_word'', result-id, :field => :myfield) But if I try to pass a model id containing this word for sure, I still get nil result :/ i.highlight(''rare_word'', model-id, :field => :myfield) I''ll try to turn this into a test case in aaf. -- Jean-Christophe Michel
On 9/4/06, Jean-Christophe Michel <jc.michel at symetrie.com> wrote:> Hi Dave, > > Le 3 sept. 06, ? 15:26, David Balmain a ?crit : > > I''ve added a highlight method to Ferret::Index::Index so you''ll be > > able to use it now. > > Thanks. Trying to use this, I updated to 0.10.2 gem. > But I cannot get highlight return something else than nil. > I suspect highly the doc id not always being my indexed class id, > though aaf code seems to create docs with Model.id :/ > > I tried to do > i.search ''rare_word'' > Mymodel.find result-id # contains no such word > i.highlight(''rare_word'', result-id, :field => :myfield) > > But if I try to pass a model id containing this word for sure, I still > get nil result :/ > i.highlight(''rare_word'', model-id, :field => :myfield) > > I''ll try to turn this into a test case in aaf. > > -- > Jean-Christophe MichelTry this; index.search_each(query) do |doc_id, score| puts index.highlight(query, doc_id, :field => :my_field).join(", ") end Also, I think you should be doing something like this to get the resulting object from the database; MyModel.find index[doc_id][:id] Hope that helps, Dave
On Sun, Sep 03, 2006 at 10:30:24PM +0200, Jean-Christophe Michel wrote:> Hi Dave, > > Le 3 sept. 06, ? 15:26, David Balmain a ?crit : > > I''ve added a highlight method to Ferret::Index::Index so you''ll be > > able to use it now. > > Thanks. Trying to use this, I updated to 0.10.2 gem. > But I cannot get highlight return something else than nil. > I suspect highly the doc id not always being my indexed class id, > though aaf code seems to create docs with Model.id :/the ferret document id is *not* your Model primary key id. retrieving the doc id from a given primary key isn''t that easy atm, since aaf''s find_by_contents returns model instances and no doc ids. Model.ferret_index.search("id:#{model.id}") should give you access to the ferret search results and therefore the document ids. I''ll add better support for this to aaf soon. I''ve been thinking about something like model_instance.highlight(''rare_word'', :field => :my_field) Jens -- webit! Gesellschaft f?r neue Medien mbH www.webit.de Dipl.-Wirtschaftsingenieur Jens Kr?mer kraemer at webit.de Schnorrstra?e 76 Tel +49 351 46766 0 D-01069 Dresden Fax +49 351 46766 66
Hi, Le 4 sept. 06, ? 01:48, David Balmain a ?crit :> index.search_each(query) do |doc_id, score| > puts index.highlight(query, doc_id, :field => > :my_field).join(", ") > endTried it, I get only nil for index.highlight :/ -- Jean-Christophe Michel
On 9/5/06, Jean-Christophe Michel <jc.michel at symetrie.com> wrote:> Hi, > > Le 4 sept. 06, ? 01:48, David Balmain a ?crit : > > index.search_each(query) do |doc_id, score| > > puts index.highlight(query, doc_id, :field => > > :my_field).join(", ") > > end > > Tried it, I get only nil for index.highlight :/Can you give me an example of what doesn''t work? Something like this; require ''rubygems'' require ''ferret'' i = Ferret::I.new(:default_field => :content) i << {:content => "here is the content I want to highlight."} puts i.highlight("content", 0) Cheers, Dave
Hi, Le 5 sept. 06, ? 01:18, David Balmain a ?crit :> Can you give me an example of what doesn''t work? Something like this; > > require ''rubygems'' > require ''ferret'' > > i = Ferret::I.new(:default_field => :content) > i << {:content => "here is the content I want to highlight."} > > puts i.highlight("content", 0)In fact this example work. The difference here is that doc is not stored in the index though aaf probably. It''s probably the reason why I don''t have a result: even Myclass.ferret_index.doc(12) returns {}. -- Jean-Christophe Michel
On 9/5/06, Jean-Christophe Michel <jc.michel at symetrie.com> wrote:> Hi, > > > Le 5 sept. 06, ? 01:18, David Balmain a ?crit : > > Can you give me an example of what doesn''t work? Something like this; > > > > require ''rubygems'' > > require ''ferret'' > > > > i = Ferret::I.new(:default_field => :content) > > i << {:content => "here is the content I want to highlight."} > > > > puts i.highlight("content", 0) > > In fact this example work. The difference here is that doc is not > stored in the index though aaf probably. It''s probably the reason why I > don''t have a result: even Myclass.ferret_index.doc(12) returns {}.Ahhhh, of course. Sorry. Jens mentioned that yesterday so I should have realized. You need to store the field as well as its term vector :with_positions_offsets if you want to highlight it. The :term_vector setting is :with_positions_offsets by default in aaf so you only need to change the :store setting for the field you want to highlight. By the way, Myclass.ferret_index.doc(12) will always return {}. The documents are lazy loading now so Myclass.ferret_index.doc(12)[:id] will return the model ID. You can load all fields with the load method. Try; puts Myclass.ferret_index.doc(12).load().inspect() That should show you which fields are actually stored which in the case of acts_as_ferret will only be the model ID (I think??). Cheers, Dave
HI Dave, Le 5 sept. 06, ? 02:24, David Balmain a ?crit :> Ahhhh, of course. Sorry. Jens mentioned that yesterday so I should > have realized. You need to store the field as well as its term vector > :with_positions_offsets if you want to highlight it. The :term_vector > setting is :with_positions_offsets by default in aaf so you only need > to change the :store setting for the field you want to highlight.I''m not convinced about storing everything once more whereas I already store the texts in db. More, I don''t know how to do it in aaf ;-)> By the way, Myclass.ferret_index.doc(12) will always return {}. The > documents are lazy loading now so Myclass.ferret_index.doc(12)[:id] > will return the model ID. You can load all fields with the load > method. Try; > > puts Myclass.ferret_index.doc(12).load().inspect() > > That should show you which fields are actually stored which in the > case of acts_as_ferret will only be the model ID (I think??).You are right. Anyway, I stick to my own ruby highlighting atm. Jean-Christophe Michel