syrius.ml at no-log.org
2007-Jun-19 22:30 UTC
[Ferret-talk] another issue with highlighting
Hi,
I''m encountering another highlighting issue.
(about the first one "range search and highlighting", i received no
response. I don''t even know if somebody tried to reproduce and/or if
it''s normal behavior)
about the new issue, an example will be easier for you to reproduce:
I''m filling an index with random data, i try to match for
"*1*" and
then highlight the matched tokens. If it''s matched and not highlighted
i put it in z
It works as expected when there''re 100 entries (replace 500.times by
100.times), in that case z contains empty arrays.
When having 500 entries it doesn''t highlight every matches !
This example has been tested with 0.11.4
(r770 has been tested with the application i first discovered this
issue with)
I would appreciate if you could test and tell me if I''m the only one
having this problem.
TIA
<example>
require ''ferret''
include Ferret
# filling
index=Index::Index.new(:path => ''/tmp/test'')
chars1 = chars2 = chars3 = chars4 = ("a".."z").to_a +
("0".."9").to_a
chars2.concat(["-", "_", " "])
chars3 << " "
chars4 << "-"
chars5 = chars6 = ("0".."9").to_a
chars6 << "."
500.times do
z={}
t=""
1.upto(15+rand(10)) { |i| t << chars4[rand(chars4.size-1)] }
z[:un] = t
t=""
1.upto(40+rand(40)) { |i| t << chars2[rand(chars2.size-1)] }
z[:deux] = t
t=""
1.upto(30+rand(10)) { |i| t << chars4[rand(chars4.size-1)] }
z[:trois] = t
t=""
1.upto(30+rand(10)) { |i| t << chars1[rand(chars1.size-1)] }
z[:quatre] = t
t=""
1.upto(30+rand(10)) { |i| t << chars2[rand(chars2.size-1)] }
z[:cinq] = t
t=""
1.upto(12) { |i| t << chars5[rand(chars5.size-1)] }
z[:six] = t
t=""
1.upto(12) { |i| t << chars6[rand(chars6.size-1)] }
z[:sept] = t
t=""
1.upto(12) { |i| t << chars6[rand(chars6.size-1)] }
z[:huit] = t
t=""
1.upto(24+rand(24)) { |i| t << chars3[rand(chars3.size-1)] }
z[:neuf] = t
t=""
1.upto(100+rand(100)) { |i| t << chars2[rand(chars2.size-1)] }
z[:dix] = t
index << z
end
#testing
q="*1*"
z={}
index.search_each(q,:limit => :all) do |id,score|
for b in [:un, :deux, :trois, :quatre, :cinq, :six, :sept, :huit, :neuf, :dix]
z[b]=[] if not z[b]
z[b] << id.to_s + " : " + index.highlight(q,id,:field => b,
:pre_tag => "<em>", :post_tag => "</em>",
:num_excerpts => :all, :excerpt_length => :all).join(" | ") if
index[id][b].match(/1/) and index.highlight(q,id,:field => b, :pre_tag =>
"<em>", :post_tag => "</em>", :num_excerpts
=> :all, :excerpt_length => :all) and not index.highlight(q,id,:field
=> b, :pre_tag => "<em>", :post_tag =>
"</em>", :num_excerpts => :all, :excerpt_length =>
:all).join(" | ").match(/<em>/)
end
end
z
index.search("*",:limit => :all).total_hits
</example>
--
syrius.ml at no-log.org
2007-Jun-26 09:46 UTC
[Ferret-talk] another issue with highlighting
syrius.ml at no-log.org writes:> Hi, > > I''m encountering another highlighting issue. > (about the first one "range search and highlighting", i received no > response. I don''t even know if somebody tried to reproduce and/or if > it''s normal behavior) > > about the new issue, an example will be easier for you to reproduce: > I''m filling an index with random data, i try to match for "*1*" and > then highlight the matched tokens. If it''s matched and not highlighted > i put it in z > > It works as expected when there''re 100 entries (replace 500.times by > 100.times), in that case z contains empty arrays. > When having 500 entries it doesn''t highlight every matches ! > > This example has been tested with 0.11.4 > (r770 has been tested with the application i first discovered this > issue with) > > I would appreciate if you could test and tell me if I''m the only one > having this problem. > TIA > > > <example> > require ''ferret'' > include Ferret > > # filling > index=Index::Index.new(:path => ''/tmp/test'') > chars1 = chars2 = chars3 = chars4 = ("a".."z").to_a + ("0".."9").to_a > chars2.concat(["-", "_", " "]) > chars3 << " " > chars4 << "-" > chars5 = chars6 = ("0".."9").to_a > chars6 << "." > 500.times do > z={} > t="" > 1.upto(15+rand(10)) { |i| t << chars4[rand(chars4.size-1)] } > z[:un] = t > t="" > 1.upto(40+rand(40)) { |i| t << chars2[rand(chars2.size-1)] } > z[:deux] = t > t="" > 1.upto(30+rand(10)) { |i| t << chars4[rand(chars4.size-1)] } > z[:trois] = t > t="" > 1.upto(30+rand(10)) { |i| t << chars1[rand(chars1.size-1)] } > z[:quatre] = t > t="" > 1.upto(30+rand(10)) { |i| t << chars2[rand(chars2.size-1)] } > z[:cinq] = t > t="" > 1.upto(12) { |i| t << chars5[rand(chars5.size-1)] } > z[:six] = t > t="" > 1.upto(12) { |i| t << chars6[rand(chars6.size-1)] } > z[:sept] = t > t="" > 1.upto(12) { |i| t << chars6[rand(chars6.size-1)] } > z[:huit] = t > t="" > 1.upto(24+rand(24)) { |i| t << chars3[rand(chars3.size-1)] } > z[:neuf] = t > t="" > 1.upto(100+rand(100)) { |i| t << chars2[rand(chars2.size-1)] } > z[:dix] = t > index << z > end > > #testing > q="*1*" > z={} > index.search_each(q,:limit => :all) do |id,score| > for b in [:un, :deux, :trois, :quatre, :cinq, :six, :sept, :huit, :neuf, :dix] > z[b]=[] if not z[b] > z[b] << id.to_s + " : " + index.highlight(q,id,:field => b, :pre_tag => "<em>", :post_tag => "</em>", :num_excerpts => :all, :excerpt_length => :all).join(" | ") if index[id][b].match(/1/) and index.highlight(q,id,:field => b, :pre_tag => "<em>", :post_tag => "</em>", :num_excerpts => :all, :excerpt_length => :all) and not index.highlight(q,id,:field => b, :pre_tag => "<em>", :post_tag => "</em>", :num_excerpts => :all, :excerpt_length => :all).join(" | ").match(/<em>/) > end > end > z > index.search("*",:limit => :all).total_hits > </example>Hi, Could somebody mind trying to reproduce this please ? Highlighting is a very important feature for me, I need to know if I''m doing something wrong or if it''s a dirty bug. Thanks in advance --
On Wed, Jun 20, 2007 at 12:30:03AM +0200, syrius.ml at no-log.org wrote:> > Hi, > > I''m encountering another highlighting issue. > (about the first one "range search and highlighting", i received no > response. I don''t even know if somebody tried to reproduce and/or if > it''s normal behavior) > > about the new issue, an example will be easier for you to reproduce: > I''m filling an index with random data, i try to match for "*1*" and > then highlight the matched tokens. If it''s matched and not highlighted > i put it in z > > It works as expected when there''re 100 entries (replace 500.times by > 100.times), in that case z contains empty arrays. > When having 500 entries it doesn''t highlight every matches ! > > This example has been tested with 0.11.4 > (r770 has been tested with the application i first discovered this > issue with) > > I would appreciate if you could test and tell me if I''m the only one > having this problem.Here z is not empty in the 500 case, too. Strange behaviour indeed, imho highlight should either return strings with some highlighted content, or nothing at all when there''s nothing to highlight... Jens -- Jens Kr?mer webit! Gesellschaft f?r neue Medien mbH Schnorrstra?e 76 | 01069 Dresden Telefon +49 351 46766-0 | Telefax +49 351 46766-66 kraemer at webit.de | www.webit.de Amtsgericht Dresden | HRB 15422 GF Sven Haubold, Hagen Malessa
syrius.ml at no-log.org
2007-Jun-27 10:33 UTC
[Ferret-talk] another issue with highlighting
Jens Kraemer <kraemer at webit.de> writes:> Here z is not empty in the 500 case, too. Strange behaviour indeed, > imho highlight should either return strings with some highlighted > content, or nothing at all when there''s nothing to highlight...Hi, Thanks Jens for your answer. hmm since content has to be stored the default behavior doesn''t surprise me. But the issue does ! :) I''m looking forward to read Dave about this :) --