You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Terry Steichen <te...@net-frame.com> on 2002/09/02 21:16:14 UTC

Re: Order by date

Try Peter Carlson's SearchBean contribution.  Check the messages - there was
quite a bit of discussion on it.

Regards,

Terry

----- Original Message -----
From: "Philipp Chudinov" <mo...@basko.ru>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Monday, September 02, 2002 3:21 PM
Subject: Order by date


> Hi!
> How can I order search results by date? I just need to show n documents,
> ordered by date (desc). I index documents with
>
> doc.add(Field.Keyword("_published", new
> SimpleDateFormat("yyyyMMddHHmmss").format(date)));
>
> , so it gives something like "20020619165800" in this field. Then I use
> RangeQuery(null, currentdate(formatted the same way
> indexed("yyyyMMddHHmmss"), true). But results are not ordered properly.
> Looks like this:
>
> 20020619165800
> 20020619165800
> 20020619165800
> 20020711170700
> 20020711170700
> 20020705131800
> 20020705131800
> 20020619165900
>
> So, how can I order them? Should I write some kind of "DateFilter" (as
> suggested here
> http://www.mail-archive.com/lucene-user@jakarta.apache.org/msg01266.html)?
> If so, can't anybody explane me, how can I do this, since I feel myself as
a
> lobotomized flatworm now:(
>
> Thanx.
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Order by date

Posted by Terry Steichen <te...@net-frame.com>.
Philipp,

I think you're confusing between (1) the task of getting a proper range of
dates, and (2) the task of getting those dates sorted.  Because of its
performance-optimzied design, the native Lucene produces results sorted only
by relevance.  To sort it some other way (by date, in your case, you have to
add that functionality yourself (for now anyway - I suspect this capability
will be folded into a future release.)

To the best of my knowledge, you can't do it without adding the extra
classes (and some performance overhead).

Regards,

Terry

----- Original Message -----
From: "Philipp Chudinov" <mo...@basko.ru>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Monday, September 02, 2002 4:32 PM
Subject: Re: Order by date


> Thank you, Terry. But I need to do it without additional classes or smth.
> I just can not understand the problem... I've tried to reindex the stuff
> with
>
> doc.add(Field.Keyword("_published", DateField.dateToString(date)));
>
> and to search with
>
>       Query query = new RangeQuery(null, new Term("_published",
> DateField.dateToString(new java.util.Date())), true);
>       DateFilter filter = DateFilter.Before("_published", new
> java.util.Date());
>       Hits hits = searcher.search(query, filter);
>
> maybe, I misunderstand how to use this filter? Does RangeQuery
automatically
> order results by field? Looks like it should... people in the mailinglist
> says, that my first approach works well (when encoding date to string with
> pattern(yyyyMMdd), but iam still lobotomized;(
> Phil.
>
> ----- Original Message -----
> From: "Terry Steichen" <te...@net-frame.com>
> To: "Lucene Users List" <lu...@jakarta.apache.org>
> Sent: Tuesday, September 03, 2002 1:16 AM
> Subject: Re: Order by date
>
>
> > Try Peter Carlson's SearchBean contribution.  Check the messages - there
> was
> > quite a bit of discussion on it.
> >
> > Regards,
> >
> > Terry
> >
> > ----- Original Message -----
> > From: "Philipp Chudinov" <mo...@basko.ru>
> > To: "Lucene Users List" <lu...@jakarta.apache.org>
> > Sent: Monday, September 02, 2002 3:21 PM
> > Subject: Order by date
> >
> >
> > > Hi!
> > > How can I order search results by date? I just need to show n
documents,
> > > ordered by date (desc). I index documents with
> > >
> > > doc.add(Field.Keyword("_published", new
> > > SimpleDateFormat("yyyyMMddHHmmss").format(date)));
> > >
> > > , so it gives something like "20020619165800" in this field. Then I
use
> > > RangeQuery(null, currentdate(formatted the same way
> > > indexed("yyyyMMddHHmmss"), true). But results are not ordered
properly.
> > > Looks like this:
> > >
> > > 20020619165800
> > > 20020619165800
> > > 20020619165800
> > > 20020711170700
> > > 20020711170700
> > > 20020705131800
> > > 20020705131800
> > > 20020619165900
> > >
> > > So, how can I order them? Should I write some kind of "DateFilter" (as
> > > suggested here
> > >
> http://www.mail-archive.com/lucene-user@jakarta.apache.org/msg01266.html)?
> > > If so, can't anybody explane me, how can I do this, since I feel
myself
> as
> > a
> > > lobotomized flatworm now:(
> > >
> > > Thanx.
> > >
> > >
> > > --
> > > To unsubscribe, e-mail:
> > <ma...@jakarta.apache.org>
> > > For additional commands, e-mail:
> > <ma...@jakarta.apache.org>
> > >
> > >
> >
> >
> > --
> > To unsubscribe, e-mail:
> <ma...@jakarta.apache.org>
> > For additional commands, e-mail:
> <ma...@jakarta.apache.org>
> >
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Order by date

Posted by Philipp Chudinov <mo...@basko.ru>.
Thank you, Peter!
Though I can not index them in a chronological order, I understand how it
works.
Phil.

----- Original Message -----
From: "Peter Carlson" <ca...@bookandhammer.com>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Tuesday, September 03, 2002 10:56 AM
Subject: Re: Order by date


> Phil,
>
> Lucene returns results in the same order as they were added to the
> index. So if you want to sort by date, and only by date then add
> documents to your index in chronological order.
>
> If you want to sort by more than one field, then one solution (and
> probably the fastest) is to get all terms of a given field and sort
> them along with their unique Lucene ID. Then, when you want to sort the
> subset of results, so the sort yourself based on the ID without using
> the index (using the index to get the values to sort will be much
> slower then getting all the values first and storing them). This was
> done in SearchBean in the contributions area if you want to see an
> example.
>
> I hope this helps
>
> --Peter
>
>
> On Monday, September 2, 2002, at 01:32 PM, Philipp Chudinov wrote:
>
> > Thank you, Terry. But I need to do it without additional classes or
> > smth.
> > I just can not understand the problem... I've tried to reindex the
> > stuff
> > with
> >
> > doc.add(Field.Keyword("_published", DateField.dateToString(date)));
> >
> > and to search with
> >
> >       Query query = new RangeQuery(null, new Term("_published",
> > DateField.dateToString(new java.util.Date())), true);
> >       DateFilter filter = DateFilter.Before("_published", new
> > java.util.Date());
> >       Hits hits = searcher.search(query, filter);
> >
> > maybe, I misunderstand how to use this filter? Does RangeQuery
> > automatically
> > order results by field? Looks like it should... people in the
> > mailinglist
> > says, that my first approach works well (when encoding date to string
> > with
> > pattern(yyyyMMdd), but iam still lobotomized;(
> > Phil.
> >
> > ----- Original Message -----
> > From: "Terry Steichen" <te...@net-frame.com>
> > To: "Lucene Users List" <lu...@jakarta.apache.org>
> > Sent: Tuesday, September 03, 2002 1:16 AM
> > Subject: Re: Order by date
> >
> >
> >> Try Peter Carlson's SearchBean contribution.  Check the messages -
> >> there
> > was
> >> quite a bit of discussion on it.
> >>
> >> Regards,
> >>
> >> Terry
> >>
> >> ----- Original Message -----
> >> From: "Philipp Chudinov" <mo...@basko.ru>
> >> To: "Lucene Users List" <lu...@jakarta.apache.org>
> >> Sent: Monday, September 02, 2002 3:21 PM
> >> Subject: Order by date
> >>
> >>
> >>> Hi!
> >>> How can I order search results by date? I just need to show n
> >>> documents,
> >>> ordered by date (desc). I index documents with
> >>>
> >>> doc.add(Field.Keyword("_published", new
> >>> SimpleDateFormat("yyyyMMddHHmmss").format(date)));
> >>>
> >>> , so it gives something like "20020619165800" in this field. Then I
> >>> use
> >>> RangeQuery(null, currentdate(formatted the same way
> >>> indexed("yyyyMMddHHmmss"), true). But results are not ordered
> >>> properly.
> >>> Looks like this:
> >>>
> >>> 20020619165800
> >>> 20020619165800
> >>> 20020619165800
> >>> 20020711170700
> >>> 20020711170700
> >>> 20020705131800
> >>> 20020705131800
> >>> 20020619165900
> >>>
> >>> So, how can I order them? Should I write some kind of "DateFilter"
> >>> (as
> >>> suggested here
> >>>
> > http://www.mail-archive.com/lucene-user@jakarta.apache.org/
> > msg01266.html)?
> >>> If so, can't anybody explane me, how can I do this, since I feel
> >>> myself
> > as
> >> a
> >>> lobotomized flatworm now:(
> >>>
> >>> Thanx.
> >>>
> >>>
> >>> --
> >>> To unsubscribe, e-mail:
> >> <ma...@jakarta.apache.org>
> >>> For additional commands, e-mail:
> >> <ma...@jakarta.apache.org>
> >>>
> >>>
> >>
> >>
> >> --
> >> To unsubscribe, e-mail:
> > <ma...@jakarta.apache.org>
> >> For additional commands, e-mail:
> > <ma...@jakarta.apache.org>
> >>
> >
> >
> > --
> > To unsubscribe, e-mail:
> > <ma...@jakarta.apache.org>
> > For additional commands, e-mail:
> > <ma...@jakarta.apache.org>
> >
> >
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Order by date:SOLVED and HitsIterator sorting

Posted by Philipp Chudinov <mo...@basko.ru>.
Thank you Peter and Terry!
The SearchBean is the remedy.
One more question:
from here:
http://www.mail-archive.com/lucene-user@jakarta.apache.org/msg01898.html

   From: Terry Steichen
   Subject: Re: SearchBean Persistence
   Date: Fri, 05 Jul 2002 07:39:03 -0700

«Changes to HitsIterator:
 Added new constructor that includes a sort order flag (a=ascending,
d=decending, r=relevance)
Add sort order parameter to sortByField() method etc.»

but it looks like
HitsIterator hi = new HitsIterator(hits, "a");
and
HitsIterator hi = new HitsIterator(hits, "d");
produces the same result... Is it fixed?

Phil


----- Original Message -----
From: "Peter Carlson" <ca...@bookandhammer.com>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Tuesday, September 03, 2002 10:56 AM
Subject: Re: Order by date


> Phil,
>
> Lucene returns results in the same order as they were added to the
> index. So if you want to sort by date, and only by date then add
> documents to your index in chronological order.
>
> If you want to sort by more than one field, then one solution (and
> probably the fastest) is to get all terms of a given field and sort
> them along with their unique Lucene ID. Then, when you want to sort the
> subset of results, so the sort yourself based on the ID without using
> the index (using the index to get the values to sort will be much
> slower then getting all the values first and storing them). This was
> done in SearchBean in the contributions area if you want to see an
> example.
>
> I hope this helps
>
> --Peter
>
>
> On Monday, September 2, 2002, at 01:32 PM, Philipp Chudinov wrote:
>
> > Thank you, Terry. But I need to do it without additional classes or
> > smth.
> > I just can not understand the problem... I've tried to reindex the
> > stuff
> > with
> >
> > doc.add(Field.Keyword("_published", DateField.dateToString(date)));
> >
> > and to search with
> >
> >       Query query = new RangeQuery(null, new Term("_published",
> > DateField.dateToString(new java.util.Date())), true);
> >       DateFilter filter = DateFilter.Before("_published", new
> > java.util.Date());
> >       Hits hits = searcher.search(query, filter);
> >
> > maybe, I misunderstand how to use this filter? Does RangeQuery
> > automatically
> > order results by field? Looks like it should... people in the
> > mailinglist
> > says, that my first approach works well (when encoding date to string
> > with
> > pattern(yyyyMMdd), but iam still lobotomized;(
> > Phil.
> >
> > ----- Original Message -----
> > From: "Terry Steichen" <te...@net-frame.com>
> > To: "Lucene Users List" <lu...@jakarta.apache.org>
> > Sent: Tuesday, September 03, 2002 1:16 AM
> > Subject: Re: Order by date
> >
> >
> >> Try Peter Carlson's SearchBean contribution.  Check the messages -
> >> there
> > was
> >> quite a bit of discussion on it.
> >>
> >> Regards,
> >>
> >> Terry
> >>
> >> ----- Original Message -----
> >> From: "Philipp Chudinov" <mo...@basko.ru>
> >> To: "Lucene Users List" <lu...@jakarta.apache.org>
> >> Sent: Monday, September 02, 2002 3:21 PM
> >> Subject: Order by date
> >>
> >>
> >>> Hi!
> >>> How can I order search results by date? I just need to show n
> >>> documents,
> >>> ordered by date (desc). I index documents with
> >>>
> >>> doc.add(Field.Keyword("_published", new
> >>> SimpleDateFormat("yyyyMMddHHmmss").format(date)));
> >>>
> >>> , so it gives something like "20020619165800" in this field. Then I
> >>> use
> >>> RangeQuery(null, currentdate(formatted the same way
> >>> indexed("yyyyMMddHHmmss"), true). But results are not ordered
> >>> properly.
> >>> Looks like this:
> >>>
> >>> 20020619165800
> >>> 20020619165800
> >>> 20020619165800
> >>> 20020711170700
> >>> 20020711170700
> >>> 20020705131800
> >>> 20020705131800
> >>> 20020619165900
> >>>
> >>> So, how can I order them? Should I write some kind of "DateFilter"
> >>> (as
> >>> suggested here
> >>>
> > http://www.mail-archive.com/lucene-user@jakarta.apache.org/
> > msg01266.html)?
> >>> If so, can't anybody explane me, how can I do this, since I feel
> >>> myself
> > as
> >> a
> >>> lobotomized flatworm now:(
> >>>
> >>> Thanx.
> >>>
> >>>
> >>> --
> >>> To unsubscribe, e-mail:
> >> <ma...@jakarta.apache.org>
> >>> For additional commands, e-mail:
> >> <ma...@jakarta.apache.org>
> >>>
> >>>
> >>
> >>
> >> --
> >> To unsubscribe, e-mail:
> > <ma...@jakarta.apache.org>
> >> For additional commands, e-mail:
> > <ma...@jakarta.apache.org>
> >>
> >
> >
> > --
> > To unsubscribe, e-mail:
> > <ma...@jakarta.apache.org>
> > For additional commands, e-mail:
> > <ma...@jakarta.apache.org>
> >
> >
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Order by date

Posted by Peter Carlson <ca...@bookandhammer.com>.
Phil,

Lucene returns results in the same order as they were added to the  
index. So if you want to sort by date, and only by date then add  
documents to your index in chronological order.

If you want to sort by more than one field, then one solution (and  
probably the fastest) is to get all terms of a given field and sort  
them along with their unique Lucene ID. Then, when you want to sort the  
subset of results, so the sort yourself based on the ID without using  
the index (using the index to get the values to sort will be much  
slower then getting all the values first and storing them). This was  
done in SearchBean in the contributions area if you want to see an  
example.

I hope this helps

--Peter


On Monday, September 2, 2002, at 01:32 PM, Philipp Chudinov wrote:

> Thank you, Terry. But I need to do it without additional classes or  
> smth.
> I just can not understand the problem... I've tried to reindex the  
> stuff
> with
>
> doc.add(Field.Keyword("_published", DateField.dateToString(date)));
>
> and to search with
>
>       Query query = new RangeQuery(null, new Term("_published",
> DateField.dateToString(new java.util.Date())), true);
>       DateFilter filter = DateFilter.Before("_published", new
> java.util.Date());
>       Hits hits = searcher.search(query, filter);
>
> maybe, I misunderstand how to use this filter? Does RangeQuery  
> automatically
> order results by field? Looks like it should... people in the  
> mailinglist
> says, that my first approach works well (when encoding date to string  
> with
> pattern(yyyyMMdd), but iam still lobotomized;(
> Phil.
>
> ----- Original Message -----
> From: "Terry Steichen" <te...@net-frame.com>
> To: "Lucene Users List" <lu...@jakarta.apache.org>
> Sent: Tuesday, September 03, 2002 1:16 AM
> Subject: Re: Order by date
>
>
>> Try Peter Carlson's SearchBean contribution.  Check the messages -  
>> there
> was
>> quite a bit of discussion on it.
>>
>> Regards,
>>
>> Terry
>>
>> ----- Original Message -----
>> From: "Philipp Chudinov" <mo...@basko.ru>
>> To: "Lucene Users List" <lu...@jakarta.apache.org>
>> Sent: Monday, September 02, 2002 3:21 PM
>> Subject: Order by date
>>
>>
>>> Hi!
>>> How can I order search results by date? I just need to show n  
>>> documents,
>>> ordered by date (desc). I index documents with
>>>
>>> doc.add(Field.Keyword("_published", new
>>> SimpleDateFormat("yyyyMMddHHmmss").format(date)));
>>>
>>> , so it gives something like "20020619165800" in this field. Then I  
>>> use
>>> RangeQuery(null, currentdate(formatted the same way
>>> indexed("yyyyMMddHHmmss"), true). But results are not ordered  
>>> properly.
>>> Looks like this:
>>>
>>> 20020619165800
>>> 20020619165800
>>> 20020619165800
>>> 20020711170700
>>> 20020711170700
>>> 20020705131800
>>> 20020705131800
>>> 20020619165900
>>>
>>> So, how can I order them? Should I write some kind of "DateFilter"  
>>> (as
>>> suggested here
>>>
> http://www.mail-archive.com/lucene-user@jakarta.apache.org/ 
> msg01266.html)?
>>> If so, can't anybody explane me, how can I do this, since I feel  
>>> myself
> as
>> a
>>> lobotomized flatworm now:(
>>>
>>> Thanx.
>>>
>>>
>>> --
>>> To unsubscribe, e-mail:
>> <ma...@jakarta.apache.org>
>>> For additional commands, e-mail:
>> <ma...@jakarta.apache.org>
>>>
>>>
>>
>>
>> --
>> To unsubscribe, e-mail:
> <ma...@jakarta.apache.org>
>> For additional commands, e-mail:
> <ma...@jakarta.apache.org>
>>
>
>
> --
> To unsubscribe, e-mail:    
> <ma...@jakarta.apache.org>
> For additional commands, e-mail:  
> <ma...@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Order by date

Posted by Philipp Chudinov <mo...@basko.ru>.
Thank you, Terry. But I need to do it without additional classes or smth.
I just can not understand the problem... I've tried to reindex the stuff
with

doc.add(Field.Keyword("_published", DateField.dateToString(date)));

and to search with

      Query query = new RangeQuery(null, new Term("_published",
DateField.dateToString(new java.util.Date())), true);
      DateFilter filter = DateFilter.Before("_published", new
java.util.Date());
      Hits hits = searcher.search(query, filter);

maybe, I misunderstand how to use this filter? Does RangeQuery automatically
order results by field? Looks like it should... people in the mailinglist
says, that my first approach works well (when encoding date to string with
pattern(yyyyMMdd), but iam still lobotomized;(
Phil.

----- Original Message -----
From: "Terry Steichen" <te...@net-frame.com>
To: "Lucene Users List" <lu...@jakarta.apache.org>
Sent: Tuesday, September 03, 2002 1:16 AM
Subject: Re: Order by date


> Try Peter Carlson's SearchBean contribution.  Check the messages - there
was
> quite a bit of discussion on it.
>
> Regards,
>
> Terry
>
> ----- Original Message -----
> From: "Philipp Chudinov" <mo...@basko.ru>
> To: "Lucene Users List" <lu...@jakarta.apache.org>
> Sent: Monday, September 02, 2002 3:21 PM
> Subject: Order by date
>
>
> > Hi!
> > How can I order search results by date? I just need to show n documents,
> > ordered by date (desc). I index documents with
> >
> > doc.add(Field.Keyword("_published", new
> > SimpleDateFormat("yyyyMMddHHmmss").format(date)));
> >
> > , so it gives something like "20020619165800" in this field. Then I use
> > RangeQuery(null, currentdate(formatted the same way
> > indexed("yyyyMMddHHmmss"), true). But results are not ordered properly.
> > Looks like this:
> >
> > 20020619165800
> > 20020619165800
> > 20020619165800
> > 20020711170700
> > 20020711170700
> > 20020705131800
> > 20020705131800
> > 20020619165900
> >
> > So, how can I order them? Should I write some kind of "DateFilter" (as
> > suggested here
> >
http://www.mail-archive.com/lucene-user@jakarta.apache.org/msg01266.html)?
> > If so, can't anybody explane me, how can I do this, since I feel myself
as
> a
> > lobotomized flatworm now:(
> >
> > Thanx.
> >
> >
> > --
> > To unsubscribe, e-mail:
> <ma...@jakarta.apache.org>
> > For additional commands, e-mail:
> <ma...@jakarta.apache.org>
> >
> >
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>