I use a custom collector:
class ResultCollector extends HitCollector
{
SortedSet set = new TreeSet();
IndexSearcher searcher;
Location me;
ResultCollector(IndexSearcher searcher, Location me)
{
this.me = me;
this.searcher = searcher;
}
public void collect(int id, float score) {
try {
Document doc = helper.searcher.doc(id);
String zc = doc.get("zipcode");
SearchResult sr = new SearchResult(
score, zc, getDistance(me, zc));
// The score in SearchResult is adjusted:
// score *= 1.0 - distance/200.0;
set.add(sr);
} catch(Exception e) {
e.printStackTrace();
}
}
int getResult(int startindex, SearchResult[] result)
{
Iterator iter = set.iterator();
int idx = 0;
for (int i=0; iter.hasNext() && idx <
result.length; ++i) {
Object o = iter.next();
if (i >= startindex)
result[idx++] = (SearchResult)o;
}
return set.size();
}
}
The SearchResult extends Comparable.
Then, use IndexSearcher.search(qry, collector);
This seems to work. What I wish for is that sorting is
done by the search engine itself, hoping for a better
performance (and cleaner code).
Previously, I have created a DistanceComparatorSource
(similar to that in LIA-ch6); sorting by distance
works but relevance is lost.
-James
--- Erik Hatcher <[EMAIL PROTECTED]> wrote:
>
> On Sep 17, 2005, at 4:10 PM, James Huang wrote:
>
> > Hi,
> >
> > I can sort the search results by distance now.
> But,
> > the relevance is lost.
> >
> > I like to have the results sorted by relevance +
> > distance, i.e., relevance first; for results of
> > similar relevance, order by distance. How to do
> that?
>
> How are you currently sorting? You can use
> multiple sort fields
> within a Sort.
>
> Erik
>
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]