📄 fieldsortedhitqueue.java
字号:
* @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorShort(final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); final short[] fieldOrder = FieldCache.DEFAULT.getShorts(reader, field); return new ScoreDocComparator() { public final int compare (final ScoreDoc i, final ScoreDoc j) { final int fi = fieldOrder[i.doc]; final int fj = fieldOrder[j.doc]; if (fi < fj) return -1; if (fi > fj) return 1; return 0; } public Comparable sortValue (final ScoreDoc i) { return new Short(fieldOrder[i.doc]); } public int sortType() { return SortField.SHORT; } }; } /** * Returns a comparator for sorting hits according to a field containing integers. * @param reader Index to use. * @param fieldname Fieldable containg integer values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorInt (final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); final int[] fieldOrder = FieldCache.DEFAULT.getInts (reader, field); return new ScoreDocComparator() { public final int compare (final ScoreDoc i, final ScoreDoc j) { final int fi = fieldOrder[i.doc]; final int fj = fieldOrder[j.doc]; if (fi < fj) return -1; if (fi > fj) return 1; return 0; } public Comparable sortValue (final ScoreDoc i) { return new Integer (fieldOrder[i.doc]); } public int sortType() { return SortField.INT; } }; } /** * Returns a comparator for sorting hits according to a field containing integers. * @param reader Index to use. * @param fieldname Fieldable containg integer values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorLong (final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); final long[] fieldOrder = ExtendedFieldCache.EXT_DEFAULT.getLongs (reader, field); return new ScoreDocComparator() { public final int compare (final ScoreDoc i, final ScoreDoc j) { final long li = fieldOrder[i.doc]; final long lj = fieldOrder[j.doc]; if (li < lj) return -1; if (li > lj) return 1; return 0; } public Comparable sortValue (final ScoreDoc i) { return new Long(fieldOrder[i.doc]); } public int sortType() { return SortField.LONG; } }; } /** * Returns a comparator for sorting hits according to a field containing floats. * @param reader Index to use. * @param fieldname Fieldable containg float values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorFloat (final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); final float[] fieldOrder = FieldCache.DEFAULT.getFloats (reader, field); return new ScoreDocComparator () { public final int compare (final ScoreDoc i, final ScoreDoc j) { final float fi = fieldOrder[i.doc]; final float fj = fieldOrder[j.doc]; if (fi < fj) return -1; if (fi > fj) return 1; return 0; } public Comparable sortValue (final ScoreDoc i) { return new Float (fieldOrder[i.doc]); } public int sortType() { return SortField.FLOAT; } }; } /** * Returns a comparator for sorting hits according to a field containing doubles. * @param reader Index to use. * @param fieldname Fieldable containg float values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorDouble(final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); final double[] fieldOrder = ExtendedFieldCache.EXT_DEFAULT.getDoubles (reader, field); return new ScoreDocComparator () { public final int compare (final ScoreDoc i, final ScoreDoc j) { final double di = fieldOrder[i.doc]; final double dj = fieldOrder[j.doc]; if (di < dj) return -1; if (di > dj) return 1; return 0; } public Comparable sortValue (final ScoreDoc i) { return new Double (fieldOrder[i.doc]); } public int sortType() { return SortField.DOUBLE; } }; } /** * Returns a comparator for sorting hits according to a field containing strings. * @param reader Index to use. * @param fieldname Fieldable containg string values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorString (final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); final FieldCache.StringIndex index = FieldCache.DEFAULT.getStringIndex (reader, field); return new ScoreDocComparator () { public final int compare (final ScoreDoc i, final ScoreDoc j) { final int fi = index.order[i.doc]; final int fj = index.order[j.doc]; if (fi < fj) return -1; if (fi > fj) return 1; return 0; } public Comparable sortValue (final ScoreDoc i) { return index.lookup[index.order[i.doc]]; } public int sortType() { return SortField.STRING; } }; } /** * Returns a comparator for sorting hits according to a field containing strings. * @param reader Index to use. * @param fieldname Fieldable containg string values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorStringLocale (final IndexReader reader, final String fieldname, final Locale locale) throws IOException { final Collator collator = Collator.getInstance (locale); final String field = fieldname.intern(); final String[] index = FieldCache.DEFAULT.getStrings (reader, field); return new ScoreDocComparator() { public final int compare(final ScoreDoc i, final ScoreDoc j) { String is = index[i.doc]; String js = index[j.doc]; if (is == js) { return 0; } else if (is == null) { return -1; } else if (js == null) { return 1; } else { return collator.compare(is, js); } } public Comparable sortValue (final ScoreDoc i) { return index[i.doc]; } public int sortType() { return SortField.STRING; } }; } /** * Returns a comparator for sorting hits according to values in the given field. * The terms in the field are looked at to determine whether they contain integers, * floats or strings. Once the type is determined, one of the other static methods * in this class is called to get the comparator. * @param reader Index to use. * @param fieldname Fieldable containg values. * @return Comparator for sorting hits. * @throws IOException If an error occurs reading the index. */ static ScoreDocComparator comparatorAuto (final IndexReader reader, final String fieldname) throws IOException { final String field = fieldname.intern(); Object lookupArray = ExtendedFieldCache.EXT_DEFAULT.getAuto (reader, field); if (lookupArray instanceof FieldCache.StringIndex) { return comparatorString (reader, field); } else if (lookupArray instanceof int[]) { return comparatorInt (reader, field); } else if (lookupArray instanceof long[]) { return comparatorLong (reader, field); } else if (lookupArray instanceof float[]) { return comparatorFloat (reader, field); } else if (lookupArray instanceof String[]) { return comparatorString (reader, field); } else { throw new RuntimeException ("unknown data type in field '"+field+"'"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -