/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.nutch.searcher; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.WritableComparable; /** A document which matched a query in an index. */ @SuppressWarnings("unchecked") public class Hit implements Writable, Comparable<Hit> { private int indexNo; // index id private String uniqueKey; private WritableComparable sortValue; // value sorted on private String dedupValue; // value to dedup on private boolean moreFromDupExcluded; public Hit() {} public Hit(int indexNo, String uniqueKey) { this(indexNo, uniqueKey, null, null); } public Hit(int indexNo, String uniqueKey, WritableComparable sortValue, String dedupValue) { this(uniqueKey, sortValue, dedupValue); this.indexNo = indexNo; } public Hit(String uniqueKey, WritableComparable sortValue, String dedupValue) { this.uniqueKey = uniqueKey; this.sortValue = sortValue; this.dedupValue = dedupValue == null ? "" : dedupValue; } /** Return the index number that this hit came from. */ public int getIndexNo() { return indexNo; } public void setIndexNo(int indexNo) { this.indexNo = indexNo; } /** Return the unique identifier of this hit within an index. */ public String getUniqueKey() { return uniqueKey; } /** Return the value of the field that hits are sorted on. */ public WritableComparable getSortValue() { return sortValue; } /** Return the value of the field that hits should be deduplicated on. */ public String getDedupValue() { return dedupValue; } /** True if other, lower-scoring, hits with the same dedup value have been * excluded from the list which contains this hit.. */ public boolean moreFromDupExcluded() { return moreFromDupExcluded; } /** True if other, lower-scoring, hits with the same dedup value have been * excluded from the list which contains this hit.. */ public void setMoreFromDupExcluded(boolean more){moreFromDupExcluded=more;} /** Display as a string. */ public String toString() { return "#" + uniqueKey; } public int compareTo(Hit other) { int compare = sortValue.compareTo(other.sortValue); if (compare != 0) { return compare; // use sortValue } else if (other.indexNo != this.indexNo) { return other.indexNo - this.indexNo; // prefer later indexes } else { return other.uniqueKey.compareTo(this.uniqueKey); // prefer later doc } } public void write(DataOutput out) throws IOException { Text.writeString(out, uniqueKey); } public void readFields(DataInput in) throws IOException { uniqueKey = Text.readString(in); } }