Java 类org.apache.lucene.search.spans.Spans 实例源码

项目:lams    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:lams    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:lams    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<>();
  TreeSet<Term> terms = new TreeSet<>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:Krill    文件:SimpleSpans.java   
/**
 * If the current x and y are not in the same document, to skip
 * the
 * span with the smaller document number, to the same OR a greater
 * document number than, the document number of the other span. Do
 * this until the x and the y are in the same doc, OR until the
 * last
 * document.
 * 
 * @return true iff such a document exists.
 */
protected boolean ensureSameDoc (Spans x, Spans y) throws IOException {
    while (x.doc() != y.doc()) {
        if (x.doc() < y.doc()) {
            if (!x.skipTo(y.doc())) {
                hasMoreSpans = false;
                return false;
            }
        }
        else {
            if (!y.skipTo(x.doc())) {
                hasMoreSpans = false;
                return false;
            }
        }
    }
    return true;
}
项目:Krill    文件:CandidateSpan.java   
/**
 * Constructs a CandidateSpan for the given Span.
 * 
 * @param span
 *            a Span
 * @throws IOException
 */
public CandidateSpan (Spans span) throws IOException {
    this.doc = span.doc();
    this.start = span.start();
    this.end = span.end();
    this.cost = span.cost();

    this.payloads = new ArrayList<>();
    if (span.isPayloadAvailable()) {
        setPayloads(span.getPayload());
    }
    if (span instanceof SimpleSpans) {
        SimpleSpans temp = (SimpleSpans) span;
        this.spanId = temp.getSpanId();
        this.hasSpanId = temp.hasSpanId;
    }
    else if (span instanceof ClassSpans) {
        this.spanId = ((ClassSpans) span).getNumber();
        this.hasSpanId = true;
    }
}
项目:Krill    文件:UnorderedElementDistanceSpans.java   
/**
 * Advances the element spans until encountering the given span.
 * 
 * @param span
 *            a span
 * @return <code>true</code> if such an element is found,
 *         <code>false</code>
 *         if the span is not in an element.
 * @throws IOException
 */
private boolean advanceElementTo (Spans span) throws IOException {
    while (hasMoreElements && elements.doc() == currentDocNum
            && elements.start() < span.end()) {

        if (span.start() >= elements.start()
                && span.end() <= elements.end()) {
            return true;
        }
        elementList.add(new CandidateSpan(elements, elementPosition));
        hasMoreElements = elements.next();
        elementPosition++;
    }

    return false; // invalid
}
项目:Krill    文件:UnorderedElementDistanceSpans.java   
@Override
protected boolean setCandidateList (List<CandidateSpan> candidateList,
        Spans candidate, boolean hasMoreCandidates,
        List<CandidateSpan> targetList) throws IOException {

    if (!targetList.isEmpty()) {
        CandidateSpan cs;
        CandidateSpan target = targetList.get(0);
        int position;
        while (hasMoreCandidates && candidate.doc() == target.getDoc()) {
            position = findElementPosition(candidate);
            if (position != -1) {
                cs = new CandidateSpan(candidate, position);

                if (isWithinMaxDistance(target, cs)) {
                    candidateList.add(cs);
                }
                else
                    break;
            }
            hasMoreCandidates = candidate.next();
        }
    }
    return hasMoreCandidates;
}
项目:Krill    文件:SpansWithAttribute.java   
/**
 * Advances the <em>not-attributes</em> to be in the same or
 * greater
 * document number than referentSpans' document number. If a
 * <em>not-attribute</em> is in the same document, it is advanced
 * to be in
 * the same as or greater start position than the current
 * referentSpan.
 * 
 * @throws IOException
 */
private void advanceNotAttributes (Spans referentSpans) throws IOException {

    for (AttributeSpans a : notAttributeList) {
        // advance the doc# of not AttributeSpans
        // logger.info("a "+a.start());
        while (!a.isFinish() && a.doc() <= referentSpans.doc()) {

            if (a.doc() == referentSpans.doc()
                    && a.start() >= referentSpans.start())
                break;

            if (!a.next())
                a.setFinish(true);
        }
    }
}
项目:search    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:search    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:search    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<>();
  TreeSet<Term> terms = new TreeSet<>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:search    文件:TestPayloadTermQuery.java   
public void test() throws IOException {
  PayloadTermQuery query = new PayloadTermQuery(new Term("field", "seventy"),
          new MaxPayloadFunction());
  TopDocs hits = searcher.search(query, null, 100);
  assertTrue("hits is null and it shouldn't be", hits != null);
  assertTrue("hits Size: " + hits.totalHits + " is not: " + 100, hits.totalHits == 100);

  //they should all have the exact same score, because they all contain seventy once, and we set
  //all the other similarity factors to be 1

  assertTrue(hits.getMaxScore() + " does not equal: " + 1, hits.getMaxScore() == 1);
  for (int i = 0; i < hits.scoreDocs.length; i++) {
    ScoreDoc doc = hits.scoreDocs[i];
    assertTrue(doc.score + " does not equal: " + 1, doc.score == 1);
  }
  CheckHits.checkExplanations(query, PayloadHelper.FIELD, searcher, true);
  Spans spans = MultiSpansWrapper.wrap(searcher.getTopReaderContext(), query);
  assertTrue("spans is null and it shouldn't be", spans != null);
  /*float score = hits.score(0);
  for (int i =1; i < hits.length(); i++)
  {
    assertTrue("scores are not equal and they should be", score == hits.score(i));
  }*/

}
项目:pyramid    文件:PhraseCountQuery.java   
@Override
public Spans getSpans(final LeafReaderContext context, Postings requiredPostings) throws IOException {

    Terms terms = context.reader().terms(field);
    if (terms == null) {
        return null; // field does not exist
    }

    ArrayList<Spans> subSpans = new ArrayList<>(clauses.size());
    for (CustomSpanWeight w : subWeights) {
        Spans subSpan = w.getSpans(context, requiredPostings);
        if (subSpan != null) {
            subSpans.add(subSpan);
        } else {
            return null; // all required
        }
    }

    // all NearSpans require at least two subSpans
    return (!inOrder) ? new CustomNearSpansUnordered(slop, subSpans)
            : new NearSpansOrdered(slop, subSpans);
}
项目:pyramid    文件:CustomSpanTermQuery.java   
@Override
public Spans getSpans(final LeafReaderContext context, Postings requiredPostings) throws IOException {

    assert termContext.wasBuiltFor(ReaderUtil.getTopLevelContext(context)) : "The top-reader used to create Weight is not the same as the current reader's top-reader (" + ReaderUtil.getTopLevelContext(context);

    final TermState state = termContext.get(context.ord);
    if (state == null) { // term is not present in that reader
        assert context.reader().docFreq(term) == 0 : "no termstate found but term exists in reader term=" + term;
        return null;
    }

    final Terms terms = context.reader().terms(term.field());
    if (terms == null)
        return null;
    if (terms.hasPositions() == false)
        throw new IllegalStateException("field \"" + term.field() + "\" was indexed without position data; cannot run CustomSpanTermQuery (term=" + term.text() + ")");

    final TermsEnum termsEnum = terms.iterator();
    termsEnum.seekExact(term.bytes(), state);

    final PostingsEnum postings = termsEnum.postings(null, requiredPostings.getRequiredPostings());
    float positionsCost = termPositionsCost(termsEnum) * PHRASE_TO_SPAN_TERM_POSITIONS_COST;
    return new TermSpans(getSimScorer(context), postings, term, positionsCost);
}
项目:NYBC    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:NYBC    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:NYBC    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<Term,TermContext>();
  TreeSet<Term> terms = new TreeSet<Term>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term, true));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:NYBC    文件:TestPayloadTermQuery.java   
public void test() throws IOException {
  PayloadTermQuery query = new PayloadTermQuery(new Term("field", "seventy"),
          new MaxPayloadFunction());
  TopDocs hits = searcher.search(query, null, 100);
  assertTrue("hits is null and it shouldn't be", hits != null);
  assertTrue("hits Size: " + hits.totalHits + " is not: " + 100, hits.totalHits == 100);

  //they should all have the exact same score, because they all contain seventy once, and we set
  //all the other similarity factors to be 1

  assertTrue(hits.getMaxScore() + " does not equal: " + 1, hits.getMaxScore() == 1);
  for (int i = 0; i < hits.scoreDocs.length; i++) {
    ScoreDoc doc = hits.scoreDocs[i];
    assertTrue(doc.score + " does not equal: " + 1, doc.score == 1);
  }
  CheckHits.checkExplanations(query, PayloadHelper.FIELD, searcher, true);
  Spans spans = MultiSpansWrapper.wrap(searcher.getTopReaderContext(), query);
  assertTrue("spans is null and it shouldn't be", spans != null);
  /*float score = hits.score(0);
  for (int i =1; i < hits.length(); i++)
  {
    assertTrue("scores are not equal and they should be", score == hits.score(i));
  }*/

}
项目:read-open-source-code    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:read-open-source-code    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:read-open-source-code    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<Term,TermContext>();
  TreeSet<Term> terms = new TreeSet<Term>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:read-open-source-code    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:read-open-source-code    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:read-open-source-code    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<Term,TermContext>();
  TreeSet<Term> terms = new TreeSet<Term>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:read-open-source-code    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:read-open-source-code    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:read-open-source-code    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<>();
  TreeSet<Term> terms = new TreeSet<>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:lucene-addons    文件:SQPTestBase.java   
long countSpans(String field, Query q) throws Exception {
  List<LeafReaderContext> ctxs = reader.leaves();

  assert (ctxs.size() == 1);
  LeafReaderContext leafReaderContext = ctxs.get(0);
  SpanQuery sq = convert(field, q);
  sq = (SpanQuery) sq.rewrite(reader);
  float boost = getBoost(q);
  SpanWeight sw = sq.createWeight(searcher, false, boost);

  final Spans spans = sw.getSpans(leafReaderContext, SpanWeight.Postings.POSITIONS);

  long i = 0;
  if (spans != null) {
    while (spans.nextDoc() != Spans.NO_MORE_DOCS) {
      while (spans.nextStartPosition() != Spans.NO_MORE_POSITIONS) {
        i++;
      }
    }
  }
  return i;
}
项目:lucene-addons    文件:SQPTestBase.java   
long countDocs(String field, Query q) throws Exception {
  BitSet docs = new BitSet();
  List<LeafReaderContext> ctxs = reader.leaves();
  assert (ctxs.size() == 1);
  LeafReaderContext leafReaderContext = ctxs.get(0);
  SpanQuery sq = convert(field, q);
  sq = (SpanQuery) sq.rewrite(reader);
  SpanWeight sw = sq.createWeight(searcher, false, getBoost(q));

  final Spans spans = sw.getSpans(leafReaderContext, SpanWeight.Postings.POSITIONS);
  if (spans != null) {
    while (spans.nextDoc() != Spans.NO_MORE_DOCS) {
      while (spans.nextStartPosition() != Spans.NO_MORE_POSITIONS) {
        docs.set(spans.docID());
      }
    }
  }
  long spanDocHits = docs.cardinality();
  // double check with a regular searcher and original query
  TotalHitCountCollector coll = new TotalHitCountCollector();
  searcher.search(q, coll);
  assertEquals(coll.getTotalHits(), spanDocHits);
  return spanDocHits;
}
项目:Maskana-Gestor-de-Conocimiento    文件:PayloadNearQuery.java   
public void getPayloads(Spans[] subSpans) throws IOException {
  for (int i = 0; i < subSpans.length; i++) {
    if (subSpans[i] instanceof NearSpansOrdered) {
      if (((NearSpansOrdered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansOrdered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansOrdered) subSpans[i]).getSubSpans());
    } else if (subSpans[i] instanceof NearSpansUnordered) {
      if (((NearSpansUnordered) subSpans[i]).isPayloadAvailable()) {
        processPayloads(((NearSpansUnordered) subSpans[i]).getPayload(),
            subSpans[i].start(), subSpans[i].end());
      }
      getPayloads(((NearSpansUnordered) subSpans[i]).getSubSpans());
    }
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:PayloadNearQuery.java   
@Override
protected boolean setFreqCurrentDoc() throws IOException {
    if (!more) {
        return false;
      }
      doc = spans.doc();
      freq = 0.0f;
      payloadScore = 0;
      payloadsSeen = 0;
      do {
        int matchLength = spans.end() - spans.start();
        freq += docScorer.computeSlopFactor(matchLength);
        Spans[] spansArr = new Spans[1];
        spansArr[0] = spans;
        getPayloads(spansArr);            
        more = spans.next();
      } while (more && (doc == spans.doc()));
      return true;
}
项目:Maskana-Gestor-de-Conocimiento    文件:PayloadSpanUtil.java   
private void getPayloads(Collection<byte []> payloads, SpanQuery query)
    throws IOException {
  Map<Term,TermContext> termContexts = new HashMap<Term,TermContext>();
  TreeSet<Term> terms = new TreeSet<Term>();
  query.extractTerms(terms);
  for (Term term : terms) {
    termContexts.put(term, TermContext.build(context, term));
  }
  for (AtomicReaderContext atomicReaderContext : context.leaves()) {
    final Spans spans = query.getSpans(atomicReaderContext, atomicReaderContext.reader().getLiveDocs(), termContexts);
    while (spans.next() == true) {
      if (spans.isPayloadAvailable()) {
        Collection<byte[]> payload = spans.getPayload();
        for (byte [] bytes : payload) {
          payloads.add(bytes);
        }
      }
    }
  }
}
项目:Maskana-Gestor-de-Conocimiento    文件:TestPayloadTermQuery.java   
public void test() throws IOException {
  PayloadTermQuery query = new PayloadTermQuery(new Term("field", "seventy"),
          new MaxPayloadFunction());
  TopDocs hits = searcher.search(query, null, 100);
  assertTrue("hits is null and it shouldn't be", hits != null);
  assertTrue("hits Size: " + hits.totalHits + " is not: " + 100, hits.totalHits == 100);

  //they should all have the exact same score, because they all contain seventy once, and we set
  //all the other similarity factors to be 1

  assertTrue(hits.getMaxScore() + " does not equal: " + 1, hits.getMaxScore() == 1);
  for (int i = 0; i < hits.scoreDocs.length; i++) {
    ScoreDoc doc = hits.scoreDocs[i];
    assertTrue(doc.score + " does not equal: " + 1, doc.score == 1);
  }
  CheckHits.checkExplanations(query, PayloadHelper.FIELD, searcher, true);
  Spans spans = MultiSpansWrapper.wrap(searcher.getTopReaderContext(), query);
  assertTrue("spans is null and it shouldn't be", spans != null);
  /*float score = hits.score(0);
  for (int i =1; i < hits.length(); i++)
  {
    assertTrue("scores are not equal and they should be", score == hits.score(i));
  }*/

}
项目:Krill    文件:SpanWithAttributeQuery.java   
@Override
public Spans getSpans (LeafReaderContext context, Bits acceptDocs,
        Map<Term, TermContext> termContexts) throws IOException {

    if (type.equals("spanWithAttribute")) {
        return new SpansWithAttribute(this, context, acceptDocs,
                termContexts);
    }

    SimpleSpans spans = (SimpleSpans) this.getFirstClause()
            .getSpans(context, acceptDocs, termContexts);
    return new SpansWithAttribute(this, spans, context, acceptDocs,
            termContexts);
}
项目:Krill    文件:SpanMultipleDistanceQuery.java   
/**
 * Filters the span matches of each constraint, returning only the
 * matches
 * meeting all the constraints.
 * 
 * @return only the span matches meeting all the constraints.
 */
@Override
public Spans getSpans (LeafReaderContext context, Bits acceptDocs,
        Map<Term, TermContext> termContexts) throws IOException {

    SpanDistanceQuery sdq, sdq2;
    Spans ds, ds2;
    MultipleDistanceSpans mds = null;
    boolean exclusion;

    sdq = new SpanDistanceQuery(firstClause, secondClause,
            constraints.get(0), collectPayloads);
    ds = sdq.getSpans(context, acceptDocs, termContexts);

    for (int i = 1; i < constraints.size(); i++) {
        sdq2 = new SpanDistanceQuery(firstClause, secondClause,
                constraints.get(i), collectPayloads);
        ds2 = sdq2.getSpans(context, acceptDocs, termContexts);

        exclusion = sdq.isExclusion() && sdq2.isExclusion();
        mds = new MultipleDistanceSpans(this, context, acceptDocs,
                termContexts, ds, ds2, isOrdered, exclusion);
        ds = mds;
    }

    return mds;
}
项目:Krill    文件:SpanExpansionQuery.java   
@Override
public Spans getSpans (LeafReaderContext context, Bits acceptDocs,
        Map<Term, TermContext> termContexts) throws IOException {

    //        Temporary:
    if (isExclusion)
        return new ExpandedExclusionSpans(this, context, acceptDocs,
                termContexts);
    else

        return new ExpandedSpans(this, context, acceptDocs, termContexts);
}
项目:Krill    文件:ElementDistanceExclusionSpans.java   
/**
 * Tells if the given span is in an element distance unit, or not,
 * by
 * advancing the element distance unit to the span position.
 * 
 * @param span
 *            a span
 * @return <code>true</code> if the element distance unit can be
 *         advanced to
 *         contain the given span, <code>false</code> otherwise.
 * @throws IOException
 */
private boolean advanceElementTo (Spans span) throws IOException {
    while (hasMoreElements && elements.doc() == currentDocNum
            && elements.start() < span.end()) {

        if (span.start() >= elements.start()
                && span.end() <= elements.end()) {
            return true;
        }

        hasMoreElements = elements.next();
        elementPosition++;
    }
    return false;
}
项目:Krill    文件:SimpleSpans.java   
/**
 * Find the same doc shared by element, firstspan and secondspan.
 * 
 * @return true iff such a doc is found.
 */
protected boolean findSameDoc (Spans x, Spans y, Spans e)
        throws IOException {

    while (hasMoreSpans) {
        if (ensureSameDoc(x, y) && e.doc() == x.doc()) {
            return true;
        }
        if (!ensureSameDoc(e, y)) {
            return false;
        };
    }
    return false;
}
项目:Krill    文件:ElementDistanceSpans.java   
/**
 * Advance elements until encountering a span within the given
 * document.
 * 
 * @return true iff an element containing the span, is found.
 */
private boolean advanceElementTo (Spans span) throws IOException {
    while (hasMoreElements && elements.doc() == candidateListDocNum
            && elements.start() < span.end()) {

        if (span.start() >= elements.start()
                && span.end() <= elements.end()) {
            return true;
        }

        hasMoreElements = elements.next();
        elementPosition++;
    }
    return false;
}
项目:Krill    文件:UnorderedElementDistanceSpans.java   
/**
 * Finds the element position of the specified span in the element
 * list or by advancing the element spans until encountering the
 * span.
 * 
 * @param span
 *            a Span
 * @return the element position
 * @throws IOException
 */
private int findElementPosition (Spans span) throws IOException {
    // Check in the element list
    if (!elementList.isEmpty() && span.end() <= elementList
            .get(elementList.size() - 1).getEnd()) {

        for (CandidateSpan e : elementList)
            if (e.getEnd() >= span.end() && e.getStart() <= span.start()) {
                return e.getPosition();
            }
        return -1; // The span is not in an element.
    }

    return (advanceElementTo(span) ? elementPosition : -1);
}