Java 类org.apache.lucene.search.TopFieldDocs 实例源码

项目:elasticsearch_my    文件:SimpleLuceneTests.java   
public void testSortValues() throws Exception {
    Directory dir = new RAMDirectory();
    IndexWriter indexWriter = new IndexWriter(dir, new IndexWriterConfig(Lucene.STANDARD_ANALYZER));
    for (int i = 0; i < 10; i++) {
        Document document = new Document();
        String text = new String(new char[]{(char) (97 + i), (char) (97 + i)});
        document.add(new TextField("str", text, Field.Store.YES));
        document.add(new SortedDocValuesField("str", new BytesRef(text)));
        indexWriter.addDocument(document);
    }
    IndexReader reader = SlowCompositeReaderWrapper.wrap(DirectoryReader.open(indexWriter));
    IndexSearcher searcher = new IndexSearcher(reader);
    TopFieldDocs docs = searcher.search(new MatchAllDocsQuery(), 10, new Sort(new SortField("str", SortField.Type.STRING)));
    for (int i = 0; i < 10; i++) {
        FieldDoc fieldDoc = (FieldDoc) docs.scoreDocs[i];
        assertThat((BytesRef) fieldDoc.fields[0], equalTo(new BytesRef(new String(new char[]{(char) (97 + i), (char) (97 + i)}))));
    }
}
项目:rpmjukebox    文件:SearchManagerTest.java   
@Test
public void shouldGetSearchResultsWhenExceptionThrownOnRelease() throws Exception {
    IndexSearcher mockTrackSearcher = mock(IndexSearcher.class);
    when(mockTrackManager.acquire()).thenReturn(mockTrackSearcher);

    ScoreDoc[] scoreDocs = { new ScoreDoc(1, 0), new ScoreDoc(2, 0) };
    when(mockTrackSearcher.search(any(), anyInt(), any()))
        .thenReturn(new TopFieldDocs(scoreDocs.length, scoreDocs, null, 0));
    setTrackSearcherDocuments(mockTrackSearcher);

    doThrow(new RuntimeException("SearchManagerTest.shouldGetSearchResultsWhenExceptionThrownOnRelease()"))
        .when(mockTrackManager).release(any());

    List<Track> result = spySearchManager.search(new TrackSearch("keywords"));

    assertThat("Result should have 2 tracks", result, hasSize(2));
}
项目:rpmjukebox    文件:SearchManagerTest.java   
@Test
public void shouldGetAlbumById() throws Exception {
    IndexSearcher mockTrackSearcher = mock(IndexSearcher.class);
    when(mockTrackManager.acquire()).thenReturn(mockTrackSearcher);

    List<ScoreDoc> scoreDocsList = new ArrayList<>();
    for (int i = 1; i < 10; i++) {
        scoreDocsList.add(new ScoreDoc(i, 0));
    }
    ScoreDoc[] scoreDocs = scoreDocsList.toArray(new ScoreDoc[scoreDocsList.size()]);

    when(mockTrackSearcher.search(any(), anyInt(), any()))
        .thenReturn(new TopFieldDocs(scoreDocs.length, scoreDocs, null, 0));
    setTrackSearcherDocuments(mockTrackSearcher);

    List<Track> tracks = spySearchManager.getAlbumById("123");

    assertThat("Tracks should have a size of 9", tracks, hasSize(9));
}
项目:rpmjukebox    文件:SearchManagerTest.java   
@Test
public void shouldGetAlbumByIdWhenExceptionThrownOnRelease() throws Exception {
    IndexSearcher mockTrackSearcher = mock(IndexSearcher.class);
    when(mockTrackManager.acquire()).thenReturn(mockTrackSearcher);

    List<ScoreDoc> scoreDocsList = new ArrayList<>();
    for (int i = 1; i < 10; i++) {
        scoreDocsList.add(new ScoreDoc(i, 0));
    }
    ScoreDoc[] scoreDocs = scoreDocsList.toArray(new ScoreDoc[scoreDocsList.size()]);

    when(mockTrackSearcher.search(any(), anyInt(), any()))
        .thenReturn(new TopFieldDocs(scoreDocs.length, scoreDocs, null, 0));
    setTrackSearcherDocuments(mockTrackSearcher);

    doThrow(new RuntimeException("SearchManagerTest.shouldGetAlbumByIdWhenExceptionThrownOnRelease()"))
        .when(mockTrackManager).release(any());

    List<Track> tracks = spySearchManager.getAlbumById("123");

    assertThat("Tracks should have a size of 9", tracks, hasSize(9));
}
项目:search    文件:TestDemoExpressions.java   
/** tests the returned sort values are correct */
public void testSortValues() throws Exception {
  Expression expr = JavascriptCompiler.compile("sqrt(_score)");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("_score", SortField.Type.SCORE));

  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = (float) Math.sqrt(d.score);
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:search    文件:TestDemoExpressions.java   
/** tests same binding used more than once in an expression */
public void testTwoOfSameBinding() throws Exception {
  Expression expr = JavascriptCompiler.compile("_score + _score");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("_score", SortField.Type.SCORE));

  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = 2*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:search    文件:TestDemoExpressions.java   
/** Uses variables with $ */
public void testDollarVariable() throws Exception {
  Expression expr = JavascriptCompiler.compile("$0+$score");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("$0", SortField.Type.SCORE));
  bindings.add(new SortField("$score", SortField.Type.SCORE));

  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = 2*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:search    文件:TestDemoExpressions.java   
/** tests expression referring to another expression */
public void testExpressionRefersToExpression() throws Exception {
  Expression expr1 = JavascriptCompiler.compile("_score");
  Expression expr2 = JavascriptCompiler.compile("2*expr1");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("_score", SortField.Type.SCORE));
  bindings.add("expr1", expr1);

  Sort sort = new Sort(expr2.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = 2*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:search    文件:TestDemoExpressions.java   
private void doTestLotsOfBindings(int n) throws Exception {
  SimpleBindings bindings = new SimpleBindings();    
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < n; i++) {
    if (i > 0) {
      sb.append("+");
    }
    sb.append("x" + i);
    bindings.add(new SortField("x" + i, SortField.Type.SCORE));
  }

  Expression expr = JavascriptCompiler.compile(sb.toString());
  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = n*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:TestDemoExpressions.java   
/** tests the returned sort values are correct */
public void testSortValues() throws Exception {
  Expression expr = JavascriptCompiler.compile("sqrt(_score)");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("_score", SortField.Type.SCORE));

  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = (float) Math.sqrt(d.score);
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:TestDemoExpressions.java   
/** tests same binding used more than once in an expression */
public void testTwoOfSameBinding() throws Exception {
  Expression expr = JavascriptCompiler.compile("_score + _score");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("_score", SortField.Type.SCORE));

  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = 2*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:TestDemoExpressions.java   
/** tests expression referring to another expression */
public void testExpressionRefersToExpression() throws Exception {
  Expression expr1 = JavascriptCompiler.compile("_score");
  Expression expr2 = JavascriptCompiler.compile("2*expr1");

  SimpleBindings bindings = new SimpleBindings();    
  bindings.add(new SortField("_score", SortField.Type.SCORE));
  bindings.add("expr1", expr1);

  Sort sort = new Sort(expr2.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = 2*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:TestDemoExpressions.java   
private void doTestLotsOfBindings(int n) throws Exception {
  SimpleBindings bindings = new SimpleBindings();    
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < n; i++) {
    if (i > 0) {
      sb.append("+");
    }
    sb.append("x" + i);
    bindings.add(new SortField("x" + i, SortField.Type.SCORE));
  }

  Expression expr = JavascriptCompiler.compile(sb.toString());
  Sort sort = new Sort(expr.getSortField(bindings, true));
  Query query = new TermQuery(new Term("body", "contents"));
  TopFieldDocs td = searcher.search(query, null, 3, sort, true, true);
  for (int i = 0; i < 3; i++) {
    FieldDoc d = (FieldDoc) td.scoreDocs[i];
    float expected = n*d.score;
    float actual = ((Double)d.fields[0]).floatValue();
    assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual));
  }
}
项目:t4f-data    文件:DistanceSortingTest.java   
public void testNeareastRestaurantToWork() throws Exception {
  Sort sort = new Sort(new SortField("unused",
      new DistanceComparatorSource(10, 10)));

  TopFieldDocs docs = searcher.search(query, null, 3, sort);  //

  assertEquals(4, docs.totalHits);              //
  assertEquals(3, docs.scoreDocs.length);       //

  FieldDoc fieldDoc = (FieldDoc) docs.scoreDocs[0];     //

  assertEquals("(10,10) -> (9,6) = sqrt(17)",
      new Float(Math.sqrt(17)),
      fieldDoc.fields[0]);                         //

  Document document = searcher.doc(fieldDoc.doc);  //
  assertEquals("Los Betos", document.get("name"));

  //dumpDocs(sort, docs);
}
项目:elasticsearch_my    文件:AbstractFieldDataImplTestCase.java   
public void testMultiValueAllSet() throws Exception {
    fillMultiValueAllSet();
    // the segments are force merged to a single segment so that the sorted binary doc values can be asserted within a single segment.
    // Previously we used the SlowCompositeReaderWrapper but this is an unideal solution so force merging is a better idea.
    writer.forceMerge(1);
    IndexFieldData indexFieldData = getForField("value");
    List<LeafReaderContext> readerContexts = refreshReader();
    for (LeafReaderContext readerContext : readerContexts) {
        AtomicFieldData fieldData = indexFieldData.load(readerContext);
        assertThat(fieldData.ramBytesUsed(), greaterThanOrEqualTo(minRamBytesUsed()));

        SortedBinaryDocValues bytesValues = fieldData.getBytesValues();
        assertValues(bytesValues, 0, two(), four());
        assertValues(bytesValues, 1, one());
        assertValues(bytesValues, 2, three());

        IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(writer));
        TopFieldDocs topDocs = searcher.search(new MatchAllDocsQuery(), 10, new Sort(new SortField("value", indexFieldData.comparatorSource(null, MultiValueMode.MIN, null))));
        assertThat(topDocs.totalHits, equalTo(3));
        assertThat(topDocs.scoreDocs.length, equalTo(3));
        assertThat(topDocs.scoreDocs[0].doc, equalTo(1));
        assertThat(topDocs.scoreDocs[1].doc, equalTo(0));
        assertThat(topDocs.scoreDocs[2].doc, equalTo(2));

        topDocs = searcher.search(new MatchAllDocsQuery(), 10, new Sort(new SortField("value", indexFieldData.comparatorSource(null, MultiValueMode.MAX, null), true)));
        assertThat(topDocs.totalHits, equalTo(3));
        assertThat(topDocs.scoreDocs.length, equalTo(3));
        assertThat(topDocs.scoreDocs[0].doc, equalTo(0));
        assertThat(topDocs.scoreDocs[1].doc, equalTo(2));
        assertThat(topDocs.scoreDocs[2].doc, equalTo(1));
    }
}
项目:rpmjukebox    文件:SearchManagerTest.java   
@Test
public void shouldGetEmptyAlbumByIdIfNoSearchResults() throws Exception {
    IndexSearcher mockTrackSearcher = mock(IndexSearcher.class);
    when(mockTrackManager.acquire()).thenReturn(mockTrackSearcher);

    when(mockTrackSearcher.search(any(), anyInt(), any()))
        .thenReturn(new TopFieldDocs(0, new ScoreDoc[] {}, null, 0));
    setArtistSearcherDocuments(mockTrackSearcher);

    List<Track> tracks = spySearchManager.getAlbumById("123");

    assertThat("Tracks should be empty", tracks.isEmpty(), equalTo(true));
}
项目:search    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, false, false, fc);
}
项目:search    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, doDocScores, doMaxScore, fc);
}
项目:gerrit    文件:LuceneChangeIndex.java   
private List<Document> doRead(Set<String> fields) throws IOException {
  IndexSearcher[] searchers = new IndexSearcher[indexes.size()];
  try {
    int realLimit = opts.start() + opts.limit();
    if (Integer.MAX_VALUE - opts.limit() < opts.start()) {
      realLimit = Integer.MAX_VALUE;
    }
    TopFieldDocs[] hits = new TopFieldDocs[indexes.size()];
    for (int i = 0; i < indexes.size(); i++) {
      searchers[i] = indexes.get(i).acquire();
      hits[i] = searchers[i].search(query, realLimit, sort);
    }
    TopDocs docs = TopDocs.merge(sort, realLimit, hits);

    List<Document> result = new ArrayList<>(docs.scoreDocs.length);
    for (int i = opts.start(); i < docs.scoreDocs.length; i++) {
      ScoreDoc sd = docs.scoreDocs[i];
      result.add(searchers[sd.shardIndex].doc(sd.doc, fields));
    }
    return result;
  } finally {
    for (int i = 0; i < indexes.size(); i++) {
      if (searchers[i] != null) {
        try {
          indexes.get(i).release(searchers[i]);
        } catch (IOException e) {
          log.warn("cannot release Lucene searcher", e);
        }
      }
    }
  }
}
项目:pagination    文件:PaginationDaoLuceneAbstract.java   
public int retrieveCountResult(P pparam) throws Exception {
      QueryParser parser = loadQueryParser();
      Query query = parser.parse(composeQuery(pparam));

      SortField[] sortfields = processQueryOrder(pparam);

IndexReader reader = null;
      IndexSearcher searcher = null;
int numTotalHits = 0;
try {
       reader = IndexReader.open(FSDirectory.open(loadLuceneIndexDirectory()));
       searcher = new IndexSearcher(reader);

       Sort sort = null;
       if ( sortfields !=null && sortfields.length>0 ) {
        sort = new Sort(sortfields);
       } else {
        sort = new Sort();
       }
       TopFieldDocs results = searcher.search(query, 5, sort);
       numTotalHits = results.totalHits;

       if ( query != null ) log.debug("query="+query.toString());
          if ( sortfields != null ) {
            for ( SortField sortField : sortfields ) {
                log.debug("sort field="+sortField.getField() + " isReverse"+sortField.getReverse());
            }
          }
} catch (Exception e) {
    log.error("",e);
} finally {
    if ( searcher != null ) {
        searcher.close();
    }
    if ( reader != null ) {
        reader.close();
    }
}
   return numTotalHits;
  }
项目:read-open-source-code    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, false, false, fc);
}
项目:read-open-source-code    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, doDocScores, doMaxScore, fc);
}
项目:read-open-source-code    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, false, false, fc);
}
项目:read-open-source-code    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, doDocScores, doMaxScore, fc);
}
项目:read-open-source-code    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, false, false, fc);
}
项目:read-open-source-code    文件:FacetsCollector.java   
/** Utility method, to search and also collect all hits
 *  into the provided {@link Collector}. */
public static TopFieldDocs search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
  if (sort == null) {
    throw new IllegalArgumentException("sort must not be null");
  }
  return (TopFieldDocs) doSearch(searcher, null, q, filter, n, sort, doDocScores, doMaxScore, fc);
}
项目:meresco-lucene    文件:TopDocSuperCollector.java   
public TopDocs topDocs(int start) throws IOException {
    TopDocs[] topdocs = this.sort == null ? new TopDocs[this.subs.size()] : new TopFieldDocs[this.subs.size()];
    for (int i = 0; i < topdocs.length; i++)
        topdocs[i] = this.subs.get(i).topdocs;
    if (this.sort == null)
        return TopDocs.merge(start, numHits - start, topdocs, true);
    return TopDocs.merge(this.sort, start, this.numHits - start, (TopFieldDocs[]) topdocs, true);
}
项目:social-event-detection    文件:SpatialIndex.java   
public Set<String> search(MultimodalItem item, int k) throws IOException {
        Set<String> set = new HashSet<String>();

        IndexReader indexReader = DirectoryReader.open(directory);
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        Point pt = ctx.makePoint(item.longitude, item.latitude);
        ValueSource valueSource = strategy.makeDistanceValueSource(pt);
        Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(indexSearcher);
        TopFieldDocs docs = indexSearcher.search(new MatchAllDocsQuery(), k, distSort);
        for(ScoreDoc scoreDoc : docs.scoreDocs) {
            Document doc = indexSearcher.doc(scoreDoc.doc);
            String otherId = doc.getField("id").stringValue();
            if(item.id.equals(otherId))
                continue;

            set.add(otherId);
//          try {
//              Number longitude = doc.getField("lng").numericValue();
//              Number latitude = doc.getField("lat").numericValue();   
//              Double dist = GeodesicDistanceCalculator.vincentyDistance(latitude.doubleValue(), longitude.doubleValue(), item.latitude, item.longitude);
//          }
//          catch(Exception e){
//              e.printStackTrace();
//          }           
        }
        indexReader.close();
        return set;
    }
项目:t4f-data    文件:DistanceSortingTest.java   
private void dumpDocs(Sort sort, TopFieldDocs docs)
    throws IOException {
  LOGGER.info("Sorted by: " + sort);
  ScoreDoc[] scoreDocs = docs.scoreDocs;
  for (int i = 0; i < scoreDocs.length; i++) {
    FieldDoc fieldDoc = (FieldDoc) scoreDocs[i];
    Float distance = (Float) fieldDoc.fields[0];
    StoredDocument doc = searcher.doc(fieldDoc.doc);
    LOGGER.info("   " + doc.get("name") +
                       " @ (" + doc.get("x") + "," + doc.get("y") + ") -> " + distance);
  }
}
项目:elasticsearch_my    文件:AbstractFieldDataImplTestCase.java   
public void testSingleValueAllSet() throws Exception {
    fillSingleValueAllSet();
    IndexFieldData indexFieldData = getForField("value");
    List<LeafReaderContext> readerContexts = refreshReader();
    for (LeafReaderContext readerContext : readerContexts) {
        AtomicFieldData fieldData = indexFieldData.load(readerContext);
        assertThat(fieldData.ramBytesUsed(), greaterThanOrEqualTo(minRamBytesUsed()));

        SortedBinaryDocValues bytesValues = fieldData.getBytesValues();

        bytesValues.setDocument(0);
        assertThat(bytesValues.count(), equalTo(1));
        assertThat(bytesValues.valueAt(0), equalTo(new BytesRef(two())));
        bytesValues.setDocument(1);
        assertThat(bytesValues.count(), equalTo(1));
        assertThat(bytesValues.valueAt(0), equalTo(new BytesRef(one())));
        bytesValues.setDocument(2);
        assertThat(bytesValues.count(), equalTo(1));
        assertThat(bytesValues.valueAt(0), equalTo(new BytesRef(three())));

        assertValues(bytesValues, 0, two());
        assertValues(bytesValues, 1, one());
        assertValues(bytesValues, 2, three());

        IndexSearcher searcher = new IndexSearcher(readerContext.reader());
        TopFieldDocs topDocs;

        topDocs = searcher.search(new MatchAllDocsQuery(), 10,
                new Sort(new SortField("value", indexFieldData.comparatorSource(null, MultiValueMode.MIN, null))));
        assertThat(topDocs.totalHits, equalTo(3));
        assertThat(topDocs.scoreDocs[0].doc, equalTo(1));
        assertThat(toString(((FieldDoc) topDocs.scoreDocs[0]).fields[0]), equalTo(one()));
        assertThat(topDocs.scoreDocs[1].doc, equalTo(0));
        assertThat(toString(((FieldDoc) topDocs.scoreDocs[1]).fields[0]), equalTo(two()));
        assertThat(topDocs.scoreDocs[2].doc, equalTo(2));
        assertThat(toString(((FieldDoc) topDocs.scoreDocs[2]).fields[0]), equalTo(three()));

        topDocs = searcher.search(new MatchAllDocsQuery(), 10,
                new Sort(new SortField("value", indexFieldData.comparatorSource(null, MultiValueMode.MAX, null), true)));
        assertThat(topDocs.totalHits, equalTo(3));
        assertThat(topDocs.scoreDocs[0].doc, equalTo(2));
        assertThat(topDocs.scoreDocs[1].doc, equalTo(0));
        assertThat(topDocs.scoreDocs[2].doc, equalTo(1));
    }
}
项目:elasticsearch_my    文件:AbstractFieldDataImplTestCase.java   
public void testSortMultiValuesFields() throws Exception {
    fillExtendedMvSet();
    IndexFieldData indexFieldData = getForField("value");

    IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(writer));
    TopFieldDocs topDocs = searcher.search(new MatchAllDocsQuery(), 10,
            new Sort(new SortField("value", indexFieldData.comparatorSource(null, MultiValueMode.MIN, null))));
    assertThat(topDocs.totalHits, equalTo(8));
    assertThat(topDocs.scoreDocs.length, equalTo(8));
    assertThat(topDocs.scoreDocs[0].doc, equalTo(7));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[0]).fields[0]).utf8ToString(), equalTo("!08"));
    assertThat(topDocs.scoreDocs[1].doc, equalTo(0));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[1]).fields[0]).utf8ToString(), equalTo("02"));
    assertThat(topDocs.scoreDocs[2].doc, equalTo(2));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[2]).fields[0]).utf8ToString(), equalTo("03"));
    assertThat(topDocs.scoreDocs[3].doc, equalTo(3));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[3]).fields[0]).utf8ToString(), equalTo("04"));
    assertThat(topDocs.scoreDocs[4].doc, equalTo(4));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString(), equalTo("06"));
    assertThat(topDocs.scoreDocs[5].doc, equalTo(6));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[5]).fields[0]).utf8ToString(), equalTo("08"));
    assertThat(topDocs.scoreDocs[6].doc, equalTo(1));
    assertThat((BytesRef) ((FieldDoc) topDocs.scoreDocs[6]).fields[0], equalTo(null));
    assertThat(topDocs.scoreDocs[7].doc, equalTo(5));
    assertThat((BytesRef) ((FieldDoc) topDocs.scoreDocs[7]).fields[0], equalTo(null));

    topDocs = searcher.search(new MatchAllDocsQuery(), 10,
            new Sort(new SortField("value", indexFieldData.comparatorSource(null, MultiValueMode.MAX, null), true)));
    assertThat(topDocs.totalHits, equalTo(8));
    assertThat(topDocs.scoreDocs.length, equalTo(8));
    assertThat(topDocs.scoreDocs[0].doc, equalTo(6));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[0]).fields[0]).utf8ToString(), equalTo("10"));
    assertThat(topDocs.scoreDocs[1].doc, equalTo(4));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[1]).fields[0]).utf8ToString(), equalTo("08"));
    assertThat(topDocs.scoreDocs[2].doc, equalTo(3));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[2]).fields[0]).utf8ToString(), equalTo("06"));
    assertThat(topDocs.scoreDocs[3].doc, equalTo(0));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[3]).fields[0]).utf8ToString(), equalTo("04"));
    assertThat(topDocs.scoreDocs[4].doc, equalTo(2));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString(), equalTo("03"));
    assertThat(topDocs.scoreDocs[5].doc, equalTo(7));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[5]).fields[0]).utf8ToString(), equalTo("!10"));
    assertThat(topDocs.scoreDocs[6].doc, equalTo(1));
    assertThat(((FieldDoc) topDocs.scoreDocs[6]).fields[0], equalTo(null));
    assertThat(topDocs.scoreDocs[7].doc, equalTo(5));
    assertThat(((FieldDoc) topDocs.scoreDocs[7]).fields[0], equalTo(null));
}
项目:elasticsearch_my    文件:ParentChildFieldDataTests.java   
public void testSorting() throws Exception {
    IndexFieldData indexFieldData = getForField(parentType);
    IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(writer));
    IndexFieldData.XFieldComparatorSource comparator = indexFieldData.comparatorSource("_last", MultiValueMode.MIN, null);

    TopFieldDocs topDocs = searcher.search(new MatchAllDocsQuery(), 10, new Sort(new SortField(ParentFieldMapper.joinField(parentType), comparator, false)));
    assertThat(topDocs.totalHits, equalTo(8));
    assertThat(topDocs.scoreDocs.length, equalTo(8));
    assertThat(topDocs.scoreDocs[0].doc, equalTo(0));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[0]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[1].doc, equalTo(1));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[1]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[2].doc, equalTo(2));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[2]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[3].doc, equalTo(5));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[3]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[4].doc, equalTo(3));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString(), equalTo("2"));
    assertThat(topDocs.scoreDocs[5].doc, equalTo(4));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[5]).fields[0]).utf8ToString(), equalTo("2"));
    assertThat(topDocs.scoreDocs[6].doc, equalTo(6));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[6]).fields[0]).utf8ToString(), equalTo("2"));
    assertThat(topDocs.scoreDocs[7].doc, equalTo(7));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[7]).fields[0]), equalTo(null));

    topDocs = searcher.search(new MatchAllDocsQuery(), 10, new Sort(new SortField(ParentFieldMapper.joinField(parentType), comparator, true)));
    assertThat(topDocs.totalHits, equalTo(8));
    assertThat(topDocs.scoreDocs.length, equalTo(8));
    assertThat(topDocs.scoreDocs[0].doc, equalTo(3));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[0]).fields[0]).utf8ToString(), equalTo("2"));
    assertThat(topDocs.scoreDocs[1].doc, equalTo(4));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[1]).fields[0]).utf8ToString(), equalTo("2"));
    assertThat(topDocs.scoreDocs[2].doc, equalTo(6));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[2]).fields[0]).utf8ToString(), equalTo("2"));
    assertThat(topDocs.scoreDocs[3].doc, equalTo(0));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[3]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[4].doc, equalTo(1));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[5].doc, equalTo(2));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[5]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[6].doc, equalTo(5));
    assertThat(((BytesRef) ((FieldDoc) topDocs.scoreDocs[6]).fields[0]).utf8ToString(), equalTo("1"));
    assertThat(topDocs.scoreDocs[7].doc, equalTo(7));
    assertThat(((FieldDoc) topDocs.scoreDocs[7]).fields[0], nullValue());
}
项目:rpmjukebox    文件:SearchManagerTest.java   
@Test
public void shouldGetSearchResults() throws Exception {
    IndexSearcher mockTrackSearcher = mock(IndexSearcher.class);
    when(mockTrackManager.acquire()).thenReturn(mockTrackSearcher);

    ScoreDoc[] scoreDocs = { new ScoreDoc(1, 0), new ScoreDoc(2, 0) };
    when(mockTrackSearcher.search(any(), anyInt(), any()))
        .thenReturn(new TopFieldDocs(scoreDocs.length, scoreDocs, null, 0));
    setTrackSearcherDocuments(mockTrackSearcher);

    List<Track> result = spySearchManager.search(new TrackSearch("keywords"));

    assertThat("Result should have 2 tracks", result, hasSize(2));

    Track track1 = result.get(0);

    assertThat("Track 1 artist ID should be 1231", track1.getArtistId(), equalTo("1231"));
    assertThat("Track 1 artist name should be 'Artist Name 1", track1.getArtistName(), equalTo("Artist Name 1"));
    assertThat("Track 1 artist image should be 'Artist Image 1", track1.getArtistImage(),
        equalTo("Artist Image 1"));
    assertThat("Track 1 album ID should be 4561", track1.getAlbumId(), equalTo("4561"));
    assertThat("Track 1 album name should be 'Album Name 1", track1.getAlbumName(), equalTo("Album Name 1"));
    assertThat("Track 1 album image should be 'Album Image 1", track1.getAlbumImage(), equalTo("Album Image 1"));
    assertThat("Track 1 year should be 2001", track1.getYear(), equalTo(2001));
    assertThat("Track 1 track ID should be 7891", track1.getTrackId(), equalTo("7891"));
    assertThat("Track 1 track name should be 'Track Name 1", track1.getTrackName(), equalTo("Track Name 1"));
    assertThat("Track 1 number should be 1", track1.getNumber(), equalTo(1));
    assertThat("Track 1 location should be 'Location 1'", track1.getLocation(), equalTo("Location 1"));
    assertThat("Track 1 is preferred should be true", track1.isPreferred(), equalTo(true));
    assertThat("Track 1 should have 2 genres", track1.getGenres(), hasSize(2));
    assertThat("Track 1 genre 0 should be 'Genre 1 1", track1.getGenres().get(0), equalTo("Genre 1 1"));
    assertThat("Track 1 genre 1 should be 'Genre 2 1", track1.getGenres().get(1), equalTo("Genre 2 1"));

    Track track2 = result.get(1);

    assertThat("Track 2 artist ID should be 1232", track2.getArtistId(), equalTo("1232"));
    assertThat("Track 2 artist name should be 'Artist Name 2", track2.getArtistName(), equalTo("Artist Name 2"));
    assertThat("Track 2 artist image should be 'Artist Image 2", track2.getArtistImage(),
        equalTo("Artist Image 2"));
    assertThat("Track 2 album ID should be 4562", track2.getAlbumId(), equalTo("4562"));
    assertThat("Track 2 album name should be 'Album Name 2", track2.getAlbumName(), equalTo("Album Name 2"));
    assertThat("Track 2 album image should be 'Album Image 2", track2.getAlbumImage(), equalTo("Album Image 2"));
    assertThat("Track 2 year should be 2002", track2.getYear(), equalTo(2002));
    assertThat("Track 2 track ID should be 7892", track2.getTrackId(), equalTo("7892"));
    assertThat("Track 2 track name should be 'Track Name 2", track2.getTrackName(), equalTo("Track Name 2"));
    assertThat("Track 2 number should be 2", track2.getNumber(), equalTo(2));
    assertThat("Track 2 location should be 'Location 2'", track2.getLocation(), equalTo("Location 2"));
    assertThat("Track 2 is preferred should be true", track2.isPreferred(), equalTo(false));
    assertThat("Track 2 should have 2 genres", track2.getGenres(), hasSize(2));
    assertThat("Track 2 genre 0 should be 'Genre 1 2", track2.getGenres().get(0), equalTo("Genre 1 2"));
    assertThat("Track 2 genre 1 should be 'Genre 2 2", track2.getGenres().get(1), equalTo("Genre 2 2"));
}
项目:search    文件:BlendedInfixSuggester.java   
@Override
protected List<Lookup.LookupResult> createResults(IndexSearcher searcher, TopFieldDocs hits, int num, CharSequence key,
                                                  boolean doHighlight, Set<String> matchedTokens, String prefixToken)
    throws IOException {

  BinaryDocValues textDV = MultiDocValues.getBinaryValues(searcher.getIndexReader(), TEXT_FIELD_NAME);
  assert textDV != null;

  // This will just be null if app didn't pass payloads to build():
  // TODO: maybe just stored fields?  they compress...
  BinaryDocValues payloadsDV = MultiDocValues.getBinaryValues(searcher.getIndexReader(), "payloads");

  TreeSet<Lookup.LookupResult> results = new TreeSet<>(LOOKUP_COMP);

  // we reduce the num to the one initially requested
  int actualNum = num / numFactor;

  for (int i = 0; i < hits.scoreDocs.length; i++) {
    FieldDoc fd = (FieldDoc) hits.scoreDocs[i];

    final String text = textDV.get(fd.doc).utf8ToString();
    long weight = (Long) fd.fields[0];

    BytesRef payload;
    if (payloadsDV != null) {
      payload = BytesRef.deepCopyOf(payloadsDV.get(fd.doc));
    } else {
      payload = null;
    }

    double coefficient;
    if (text.startsWith(key.toString())) {
      // if hit starts with the key, we don't change the score
      coefficient = 1;
    } else {
      coefficient = createCoefficient(searcher, fd.doc, matchedTokens, prefixToken);
    }

    long score = (long) (weight * coefficient);

    LookupResult result;
    if (doHighlight) {
      result = new LookupResult(text, highlight(text, matchedTokens, prefixToken), score, payload);
    } else {
      result = new LookupResult(text, score, payload);
    }

    boundedTreeAdd(results, result, actualNum);
  }

  return new ArrayList<>(results.descendingSet());
}
项目:pagination    文件:PaginationDaoLuceneAbstract.java   
public List<Document> retrievePageResult(P pparam) throws Exception {
List<Document> documents = new ArrayList<Document>();
      QueryParser parser = loadQueryParser();
      Query query = parser.parse(composeQuery(pparam));

      SortField[] sortfields = processQueryOrder(pparam);

IndexReader reader = null;
      IndexSearcher searcher = null;
int numTotalHits = 0;
try {
       reader = IndexReader.open(FSDirectory.open(loadLuceneIndexDirectory()));
       searcher = new IndexSearcher(reader);

       Sort sort = null;
       if ( sortfields !=null && sortfields.length>0 ) {
        sort = new Sort(sortfields);
       } else {
        sort = new Sort();
       }
       TopFieldDocs results = searcher.search(query, 5, sort);
       numTotalHits = results.totalHits;

       if ( results.totalHits > 0 ) {
           ScoreDoc[] hits = searcher.search(query, numTotalHits, sort).scoreDocs;
           int readpos = 0;
           int NO_OF_RESULT_PER_QUERY = 25;
           if ( !StringUtils.isEmpty(pparam.getResultIndex()) ) {
            readpos = Integer.parseInt(pparam.getResultIndex());
           }
           if ( !StringUtils.isEmpty(pparam.getRecordPerPage()) ) {
            NO_OF_RESULT_PER_QUERY=Integer.parseInt(pparam.getRecordPerPage());
           }
              for ( int i = readpos; i < readpos+NO_OF_RESULT_PER_QUERY && i < numTotalHits; i++ ) {
                  Document tmpdoc = searcher.doc(hits[i].doc);
                  documents.add(tmpdoc);
              }
       }
          if ( query != null ) log.debug("query="+query.toString());
          if ( sortfields != null ) {
            for ( SortField sortField : sortfields ) {
                log.debug("sort field="+sortField.getField() + " isReverse="+sortField.getReverse());
            }
          }

} catch (Exception e) {
    log.error("",e);
} finally {
    if ( searcher != null ) {
        searcher.close();
    }
    if ( reader != null ) {
        reader.close();
    }
}
   return documents;
  }
项目:read-open-source-code    文件:BlendedInfixSuggester.java   
@Override
protected List<Lookup.LookupResult> createResults(IndexSearcher searcher, TopFieldDocs hits, int num, CharSequence key,
                                                  boolean doHighlight, Set<String> matchedTokens, String prefixToken)
    throws IOException {

  BinaryDocValues textDV = MultiDocValues.getBinaryValues(searcher.getIndexReader(), TEXT_FIELD_NAME);
  assert textDV != null;

  // This will just be null if app didn't pass payloads to build():
  // TODO: maybe just stored fields?  they compress...
  BinaryDocValues payloadsDV = MultiDocValues.getBinaryValues(searcher.getIndexReader(), "payloads");

  TreeSet<Lookup.LookupResult> results = new TreeSet<>(LOOKUP_COMP);

  // we reduce the num to the one initially requested
  int actualNum = num / numFactor;

  for (int i = 0; i < hits.scoreDocs.length; i++) {
    FieldDoc fd = (FieldDoc) hits.scoreDocs[i];

    final String text = textDV.get(fd.doc).utf8ToString();
    long weight = (Long) fd.fields[0];

    BytesRef payload;
    if (payloadsDV != null) {
      payload = BytesRef.deepCopyOf(payloadsDV.get(fd.doc));
    } else {
      payload = null;
    }

    double coefficient;
    if (text.startsWith(key.toString())) {
      // if hit starts with the key, we don't change the score
      coefficient = 1;
    } else {
      coefficient = createCoefficient(searcher, fd.doc, matchedTokens, prefixToken);
    }

    long score = (long) (weight * coefficient);

    LookupResult result;
    if (doHighlight) {
      result = new LookupResult(text, highlight(text, matchedTokens, prefixToken), score, payload);
    } else {
      result = new LookupResult(text, score, payload);
    }

    boundedTreeAdd(results, result, actualNum);
  }

  return new ArrayList<>(results.descendingSet());
}
项目:whois    文件:AutocompleteSearch.java   
public List<Map<String, Object>> search(
    final String queryString,                       // search value
    final Set<AttributeType> queryAttributes,       // attribute(s) to search in
    final Set<AttributeType> responseAttributes,    // attribute(s) to return
    final Set<ObjectType> objectTypes)              // filter by object type(s)
        throws IOException {                        // TODO: wrap IOException, return something sensible
    return fullTextIndex.search(
        (final IndexReader indexReader, final TaxonomyReader taxonomyReader, final IndexSearcher indexSearcher) -> {
            final List<Map<String, Object>> results = Lists.newArrayList();

            final Query query;
            try {
                if (objectTypes != null && !objectTypes.isEmpty()) {
                    query = combine(constructQuery(queryAttributes, queryString), constructQuery(objectTypes));
                } else {
                    query = constructQuery(queryAttributes, queryString);
                }
            } catch (ParseException e) {
                // TODO: [ES] fix parsing of asterisk (wildcard) as first character
                LOGGER.info("Caught {} on {}", e.getMessage(), queryString);
                return Collections.<Map<String, Object>>emptyList();
            }

            final TopFieldDocs topDocs = indexSearcher.search(query, MAX_SEARCH_RESULTS, SORT_BY_LOOKUP_KEY);

            for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
                final Document doc = indexSearcher.doc(scoreDoc.doc);
                final Map<String, Object> result = Maps.newLinkedHashMap();
                result.put("key", doc.get(FullTextIndex.LOOKUP_KEY_FIELD_NAME));
                result.put("type", doc.get(FullTextIndex.OBJECT_TYPE_FIELD_NAME));

                for (final AttributeType attribute : responseAttributes) {
                    final ObjectTemplate template = ObjectTemplate.getTemplate(
                            ObjectType.getByName(doc.get(FullTextIndex.OBJECT_TYPE_FIELD_NAME)));

                    if (template.getMultipleAttributes().contains(attribute)) {
                        result.put(attribute.getName(), Lists.newArrayList(doc.getValues(attribute.getName())));
                    } else {
                        result.put(attribute.getName(), doc.get(attribute.getName()));
                    }
                }

                results.add(result);
            }

            return results;
    });
}