ScoreDocComparator.java
001 package gate.creole.annic.apache.lucene.search;
002 
003 /**
004  * Copyright 2004 The Apache Software Foundation
005  *
006  * Licensed under the Apache License, Version 2.0 (the "License");
007  * you may not use this file except in compliance with the License.
008  * You may obtain a copy of the License at
009  *
010  *     http://www.apache.org/licenses/LICENSE-2.0
011  *
012  * Unless required by applicable law or agreed to in writing, software
013  * distributed under the License is distributed on an "AS IS" BASIS,
014  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015  * See the License for the specific language governing permissions and
016  * limitations under the License.
017  */
018 
019 
020 /**
021  * Expert: Compares two ScoreDoc objects for sorting.
022  *
023  <p>Created: Feb 3, 2004 9:00:16 AM
024  *
025  @author  Tim Jones (Nacimiento Software)
026  @since   lucene 1.4
027  @version $Id: ScoreDocComparator.java 529 2004-10-05 11:55:26Z niraj $
028  */
029 @SuppressWarnings("rawtypes")
030 public interface ScoreDocComparator {
031 
032   /** Special comparator for sorting hits according to computed relevance (document score). */
033   static final ScoreDocComparator RELEVANCE = new ScoreDocComparator() {
034     @Override
035     public int compare (ScoreDoc i, ScoreDoc j) {
036       if (i.score > j.scorereturn -1;
037       if (i.score < j.scorereturn 1;
038       return 0;
039     }
040     @Override
041     public Comparable sortValue (ScoreDoc i) {
042       return new Float (i.score);
043     }
044     @Override
045     public int sortType() {
046       return SortField.SCORE;
047     }
048   };
049 
050 
051   /** Special comparator for sorting hits according to index order (document number). */
052   static final ScoreDocComparator INDEXORDER = new ScoreDocComparator() {
053     @Override
054     public int compare (ScoreDoc i, ScoreDoc j) {
055       if (i.doc < j.docreturn -1;
056       if (i.doc > j.docreturn 1;
057       return 0;
058     }
059     @Override
060     public Comparable sortValue (ScoreDoc i) {
061       return new Integer (i.doc);
062     }
063     @Override
064     public int sortType() {
065       return SortField.DOC;
066     }
067   };
068 
069 
070   /**
071    * Compares two ScoreDoc objects and returns a result indicating their
072    * sort order.
073    @param i First ScoreDoc
074    @param j Second ScoreDoc
075    @return <code>-1</code> if <code>i</code> should come before <code>j</code><br><code>1</code> if <code>i</code> should come after <code>j</code><br><code>0</code> if they are equal
076    @see java.util.Comparator
077    */
078   int compare (ScoreDoc i, ScoreDoc j);
079 
080 
081   /**
082    * Returns the value used to sort the given document.  The
083    * object returned must implement the java.io.Serializable
084    * interface.  This is used by multisearchers to determine how to collate results from their searchers.
085    @see FieldDoc
086    @param i Document
087    @return Serializable object
088    */
089   Comparable sortValue (ScoreDoc i);
090 
091 
092   /**
093    * Returns the type of sort.  Should return <code>SortField.SCORE</code><code>SortField.DOC</code><code>SortField.STRING</code><code>SortField.INTEGER</code>,
094    <code>SortField.FLOAT</code> or <code>SortField.CUSTOM</code>.  It is not valid to return <code>SortField.AUTO</code>.
095    * This is used by multisearchers to determine how to collate results from their searchers.
096    @return One of the constants in SortField.
097    @see SortField
098    */
099   int sortType();
100 }