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

项目:lams    文件:PayloadNearQuery.java   
@Override
public String toString(String field) {
  StringBuilder buffer = new StringBuilder();
  buffer.append("payloadNear([");
  Iterator<SpanQuery> i = clauses.iterator();
  while (i.hasNext()) {
    SpanQuery clause = i.next();
    buffer.append(clause.toString(field));
    if (i.hasNext()) {
      buffer.append(", ");
    }
  }
  buffer.append("], ");
  buffer.append(slop);
  buffer.append(", ");
  buffer.append(inOrder);
  buffer.append(")");
  buffer.append(ToStringUtils.boost(getBoost()));
  return buffer.toString();
}
项目: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);
        }
      }
    }
  }
}
项目:lams    文件:SpanNotBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  Element includeElem = DOMUtils.getChildByTagOrFail(e, "Include");
  includeElem = DOMUtils.getFirstChildOrFail(includeElem);

  Element excludeElem = DOMUtils.getChildByTagOrFail(e, "Exclude");
  excludeElem = DOMUtils.getFirstChildOrFail(excludeElem);

  SpanQuery include = factory.getSpanQuery(includeElem);
  SpanQuery exclude = factory.getSpanQuery(excludeElem);

  SpanNotQuery snq = new SpanNotQuery(include, exclude);

  snq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
  return snq;
}
项目:search    文件:SpanOrQueryNodeBuilder.java   
@Override
public SpanOrQuery build(QueryNode node) throws QueryNodeException {

  // validates node
  BooleanQueryNode booleanNode = (BooleanQueryNode) node;

  List<QueryNode> children = booleanNode.getChildren();
  SpanQuery[] spanQueries = new SpanQuery[children.size()];

  int i = 0;
  for (QueryNode child : children) {
    spanQueries[i++] = (SpanQuery) child
        .getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);
  }

  return new SpanOrQuery(spanQueries);

}
项目:Krill    文件:SpanFocusQuery.java   
@Override
public Query rewrite (IndexReader reader) throws IOException {
    SpanFocusQuery clone = null;
    SpanQuery query = (SpanQuery) this.firstClause.rewrite(reader);

    if (query != this.firstClause) {
        if (clone == null)
            clone = this.clone();
        clone.firstClause = query;
    };

    if (clone != null)
        return clone;

    return this;
}
项目:Krill    文件:TestMultipleDistanceIndex.java   
@Test
  public void queryJSONwildcardNoFoundry () throws QueryException, IOException {
      // meine*
      ki = new KrillIndex();
      ki.addDoc(createFieldDoc5());
      ki.commit();

      // treat merging gracefully
SpanQueryWrapper sqw = getJSONQuery(
    getClass().getResource("/queries/bugs/cosmas_wildcards_missingfoundry.jsonld")
    .getFile());
SpanQuery sq = sqw.toQuery();
assertEquals(sq.toString(),"SpanMultiTermQueryWrapper(tokens:l:Erfahr*)");

kr = ki.search(sq, (short) 10);
      assertEquals(4, kr.getMatches().size());
      assertEquals(1, kr.getMatch(0).getStartPos());
      assertEquals(2, kr.getMatch(0).getEndPos());
  }
项目:Krill    文件:TestElementDistanceIndex.java   
/** Same tokens in different elements */
@Test
public void testCase4 () throws IOException {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.commit();

    SpanQuery sq;
    sq = createQuery("s", "s:b", "s:b", 1, 2, true);
    kr = ki.search(sq, (short) 10);

    assertEquals(kr.getTotalResults(), 2);
    assertEquals(0, kr.getMatch(0).startPos);
    assertEquals(4, kr.getMatch(0).endPos);
    assertEquals(3, kr.getMatch(1).startPos);
    assertEquals(5, kr.getMatch(1).endPos);

}
项目:Krill    文件:TestUnorderedElementDistanceIndex.java   
/**
 * Only terms within an element are matched.
 */
@Test
public void testCase1 () throws IOException {
    //System.out.println("testCase1");
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.commit();

    SpanQuery sq;
    sq = createQuery("s", "s:b", "s:c", 0, 1, false);
    kr = ki.search(sq, (short) 10);

    assertEquals((long) 5, kr.getTotalResults());
    assertEquals(0, kr.getMatch(0).startPos);
    assertEquals(1, kr.getMatch(0).endPos);
    assertEquals(0, kr.getMatch(1).startPos);
    assertEquals(3, kr.getMatch(1).endPos);
    assertEquals(2, kr.getMatch(2).startPos);
    assertEquals(4, kr.getMatch(2).endPos);
    assertEquals(3, kr.getMatch(3).startPos);
    assertEquals(5, kr.getMatch(3).endPos);
    assertEquals(4, kr.getMatch(4).startPos);
    assertEquals(7, kr.getMatch(4).endPos);

}
项目:Krill    文件:TestNextIndex.java   
@Test
public void indexExample3 () throws IOException {
    KrillIndex ki = new KrillIndex();

    // abcabcabac
    FieldDocument fd = new FieldDocument();
    fd.addTV("base", "abcabcabac", "[(0-1)s:a|i:a|_0$<i>0<i>1|-:t$<i>10]"
            + "[(1-2)s:b|i:b|_1$<i>1<i>2]" + "[(2-3)s:c|i:c|_2$<i>2<i>3]"
            + "[(3-4)s:a|i:a|_3$<i>3<i>4|<>:x$<b>64<i>3<i>7<i>7<b>0]"
            + "[(4-5)s:b|i:b|_4$<i>4<i>5]" + "[(5-6)s:c|i:c|_5$<i>5<i>6]"
            + "[(6-7)s:a|i:a|_6$<i>6<i>7]" + "[(7-8)s:b|i:b|_7$<i>7<i>8]"
            + "[(8-9)s:a|i:a|_8$<i>8<i>9]"
            + "[(9-10)s:c|i:c|_9$<i>9<i>10]");
    ki.addDoc(fd);

    ki.commit();

    SpanQuery sq;
    Result kr;

    sq = new SpanNextQuery(new SpanElementQuery("base", "x"),
            new SpanTermQuery(new Term("base", "s:b")));

    kr = ki.search(sq, (short) 10);
    assertEquals("abc[[abcab]]ac", kr.getMatch(0).getSnippetBrackets());
}
项目:Krill    文件:TestAttributeIndex.java   
/**
 * same attribute types referring to different element types
 */
@Test
public void testCase3 () throws IOException {
    ki.addDoc(createFieldDoc2());
    ki.commit();

    List<SpanQuery> sql = new ArrayList<>();
    sql.add(new SpanAttributeQuery(
            new SpanTermQuery(new Term("base", "@:class=header")), true));
    sql.add(new SpanAttributeQuery(
            new SpanTermQuery(new Term("base", "@:class=book")), true,
            true));
    SpanQuery sq = new SpanWithAttributeQuery(
            new SpanElementQuery("base", "div"), sql, true);

    kr = ki.search(sq, (short) 10);

    assertEquals((long) 3, kr.getTotalResults());
    assertEquals(1, kr.getMatch(0).getStartPos());
    assertEquals(2, kr.getMatch(0).getEndPos());
    assertEquals(5, kr.getMatch(1).getStartPos());
    assertEquals(6, kr.getMatch(1).getEndPos());
    assertEquals(6, kr.getMatch(2).getStartPos());
    assertEquals(7, kr.getMatch(2).getEndPos());
}
项目:Krill    文件:SpanWithAttributeQueryWrapper.java   
private SpanAttributeQuery createSpanAttributeQuery (
        SpanQueryWrapper attrQueryWrapper) throws QueryException {
    SpanQuery sq = attrQueryWrapper.toFragmentQuery();
    if (sq != null) {
        if (sq instanceof SpanAttributeQuery)
            return (SpanAttributeQuery) sq;
        if (sq instanceof SpanTermQuery) {
            return new SpanAttributeQuery((SpanTermQuery) sq,
                    attrQueryWrapper.isNegative, true);
        }
        else {
            throw new IllegalArgumentException(
                    "The subquery is not a SpanTermQuery.");
        }
    }
    return null;
}
项目:Krill    文件:TestElementDistanceIndex.java   
/**
 * Ensure terms and elements are in the same doc
 */
@Test
public void testCase2 () throws IOException {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.addDoc(createFieldDoc1());
    ki.addDoc(createFieldDoc2());
    ki.commit();

    SpanQuery sq;
    sq = createQuery("p", "s:b", "s:d", 1, 1, true);
    kr = ki.search(sq, (short) 10);

    assertEquals(kr.getTotalResults(), 1);
    assertEquals(2, kr.getMatch(0).getLocalDocID());
    assertEquals(2, kr.getMatch(0).startPos);
    assertEquals(4, kr.getMatch(0).endPos);

}
项目:Krill    文件:TestMultipleDistanceIndex.java   
@Test
public void testUnorderedTokenDistance () throws IOException {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc4());
    ki.commit();

    List<DistanceConstraint> constraints =
            new ArrayList<DistanceConstraint>();
    constraints.add(createConstraint("w", 0, 5, true, false));
    constraints.add(createConstraint("s", 0, 0, true, false));

    SpanQuery mdq;
    mdq = createQuery("s:Begin", "s:Moderator", constraints, false);
    kr = ki.search(mdq, (short) 10);
    assertEquals(1, kr.getMatch(0).getStartPos());
    assertEquals(7, kr.getMatch(0).getEndPos());

    SpanQuery sq = new SpanDistanceQuery(mdq,
            new SpanTermQuery(new Term("base", "s:ruft")),
            new DistanceConstraint(0, 0, false, false), true);

    kr = ki.search(sq, (short) 10);
    assertEquals(1, kr.getMatch(0).getStartPos());
    assertEquals(7, kr.getMatch(0).getEndPos());
}
项目:Krill    文件:TestReferenceIndex.java   
@Test
public void testCase4 () throws Exception {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.addDoc(createFieldDoc1());
    ki.commit();

    String filepath = getClass()
            .getResource("/queries/reference/distance-reference.jsonld")
            .getFile();
    SpanQueryWrapper sqwi = getJSONQuery(filepath);
    SpanQuery sq = sqwi.toQuery();

    kr = ki.search(sq, (short) 10);

    assertEquals(4, kr.getTotalResults());
    assertEquals("doc-1", kr.getMatch(3).getDocID());
    assertEquals(2, kr.getMatch(3).getStartPos());
    assertEquals(4, kr.getMatch(3).getEndPos());
}
项目:Krill    文件:SpanRelationMatchQuery.java   
/**
 * Checks if the SpanRelationQuery and the source and target
 * SpanQuery are not null and if the SpanQueries have the same
 * field as the SpanRelationQuery.
 * 
 * @param relation
 *            SpanRelationQery
 * @param source
 *            SpanQuery
 * @param target
 *            SpanQuery
 */
public void checkArguments (SpanRelationQuery relation, SpanQuery source,
        SpanQuery target) {
    checkArguments(relation, source);
    if (target == null) {
        if (source == null) {
            throw new IllegalArgumentException(
                    "The target query cannot be null.");
        }
    }
    if (!target.getField().equals(field)) {
        throw new IllegalArgumentException(
                "Clauses must have the same field.");
    }
    this.operand2Query = target;
}
项目:search    文件:PayloadNearQuery.java   
@Override
public String toString(String field) {
  StringBuilder buffer = new StringBuilder();
  buffer.append("payloadNear([");
  Iterator<SpanQuery> i = clauses.iterator();
  while (i.hasNext()) {
    SpanQuery clause = i.next();
    buffer.append(clause.toString(field));
    if (i.hasNext()) {
      buffer.append(", ");
    }
  }
  buffer.append("], ");
  buffer.append(slop);
  buffer.append(", ");
  buffer.append(inOrder);
  buffer.append(")");
  buffer.append(ToStringUtils.boost(getBoost()));
  return buffer.toString();
}
项目:Krill    文件:TestRepetitionIndex.java   
@Test
public void testTermQuery () throws IOException {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.commit();

    // Quantifier only
    // c{1,2}
    SpanQuery sq = new SpanRepetitionQuery(
            new SpanTermQuery(new Term("base", "s:c")), 1, 2, true);
    kr = ki.search(sq, (short) 10);
    // 0-1, 2-3, 2-4, 3-4, 5-6
    assertEquals((long) 5, kr.getTotalResults());
    assertEquals(0, kr.getMatch(0).getStartPos());
    assertEquals(1, kr.getMatch(0).getEndPos());
    assertEquals(2, kr.getMatch(1).getStartPos());
    assertEquals(3, kr.getMatch(1).getEndPos());
    assertEquals(2, kr.getMatch(2).getStartPos());
    assertEquals(4, kr.getMatch(2).getEndPos());
    assertEquals(3, kr.getMatch(3).getStartPos());
    assertEquals(4, kr.getMatch(3).getEndPos());
    assertEquals(5, kr.getMatch(4).getStartPos());
    assertEquals(6, kr.getMatch(4).getEndPos());
}
项目:Krill    文件:TestSpanRelationQueryJSON.java   
@Test
public void testTypedRelationWithWrapTokenNodes () throws QueryException {
    // query = "corenlp/c=\"VP\" & corenlp/c=\"NP\" & #1 ->malt/d[func=\"PP\"] #2";
    String filepath = getClass()
            .getResource(
                    "/queries/relation/typed-relation-with-wrap-token-nodes.json")
            .getFile();
    SpanQueryWrapper sqwi = getJSONQuery(filepath);
    SpanQuery sq = sqwi.toQuery();
    assertEquals(
            "focus(#[1,2]spanSegment(tokens:tt/p:VVINF, "
                    + "focus(#2: spanSegment("
                    + "spanRelation(tokens:>:malt/d:KONJ), tokens:tt/p:KOUI))))",
            sq.toString());

}
项目:Krill    文件:SimpleSpanQuery.java   
/** {@inheritDoc} */
@Override
public void extractTerms (Set<Term> terms) {

    if (terms == null) {
        throw new IllegalArgumentException("The term set cannot be null.");
    }

    if (firstClause != null) {
        firstClause.extractTerms(terms);
    }

    if (secondClause != null) {
        secondClause.extractTerms(terms);
    }
    else if (clauseList != null) {
        for (SpanQuery clause : clauseList) {
            clause.extractTerms(terms);
        }
    }
}
项目:Krill    文件:TestElementDistanceIndex.java   
/** Skip to */
@Test
public void testCase3 () throws IOException {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.addDoc(createFieldDoc1());
    ki.addDoc(createFieldDoc3());
    ki.commit();

    SpanQuery sq, edq;
    edq = createQuery("s", "s:b", "s:c", 1, 1, true);

    sq = new SpanNextQuery(edq,
            new SpanTermQuery(new Term("tokens", "s:d")));

    kr = ki.search(sq, (short) 10);

    assertEquals(1, kr.getTotalResults());
    assertEquals(2, kr.getMatch(0).getLocalDocID());
    assertEquals(2, kr.getMatch(0).startPos);
    assertEquals(5, kr.getMatch(0).endPos);

}
项目:Krill    文件:TestRepetitionIndex.java   
/** OR */
@Test
public void testCase3 () throws IOException {
    ki = new KrillIndex();
    ki.addDoc(createFieldDoc0());
    ki.commit();

    SpanQuery sq, sq2;
    // ec{1,2}
    sq = new SpanNextQuery(new SpanTermQuery(new Term("base", "s:e")),
            new SpanOrQuery(new SpanRepetitionQuery(
                    new SpanTermQuery(new Term("base", "s:c")), 1, 1, true),
                    new SpanRepetitionQuery(
                            new SpanTermQuery(new Term("base", "s:b")), 1,
                            1, true)));
    kr = ki.search(sq, (short) 10);
    assertEquals((long) 3, kr.getTotalResults());
    assertEquals(1, kr.getMatch(0).startPos);
    assertEquals(3, kr.getMatch(0).endPos);
    assertEquals(4, kr.getMatch(1).startPos);
    assertEquals(6, kr.getMatch(1).endPos);
    assertEquals(7, kr.getMatch(2).startPos);
    assertEquals(9, kr.getMatch(2).endPos);

}
项目:elasticsearch_my    文件:MapperQueryParser.java   
private Query addSlopToSpan(SpanQuery query, int slop) {
    if (query instanceof SpanNearQuery) {
        return new SpanNearQuery(((SpanNearQuery) query).getClauses(), slop,
            ((SpanNearQuery) query).isInOrder());
    } else if (query instanceof SpanOrQuery) {
        SpanQuery[] clauses = new SpanQuery[((SpanOrQuery) query).getClauses().length];
        int pos = 0;
        for (SpanQuery clause : ((SpanOrQuery) query).getClauses()) {
            clauses[pos++] = (SpanQuery) addSlopToSpan(clause, slop);
        }
        return new SpanOrQuery(clauses);
    } else {
        return query;
    }
}
项目:elasticsearch_my    文件:FieldMaskingSpanQueryBuilder.java   
@Override
protected SpanQuery doToQuery(QueryShardContext context) throws IOException {
    String fieldInQuery = fieldName;
    MappedFieldType fieldType = context.fieldMapper(fieldName);
    if (fieldType != null) {
        fieldInQuery = fieldType.name();
    }
    Query innerQuery = queryBuilder.toQuery(context);
    assert innerQuery instanceof SpanQuery;
    return new FieldMaskingSpanQuery((SpanQuery)innerQuery, fieldInQuery);
}
项目:elasticsearch_my    文件:SpanNearQueryBuilderTests.java   
@Override
protected void doAssertLuceneQuery(SpanNearQueryBuilder queryBuilder, Query query, SearchContext context) throws IOException {
    assertThat(query, instanceOf(SpanNearQuery.class));
    SpanNearQuery spanNearQuery = (SpanNearQuery) query;
    assertThat(spanNearQuery.getSlop(), equalTo(queryBuilder.slop()));
    assertThat(spanNearQuery.isInOrder(), equalTo(queryBuilder.inOrder()));
    assertThat(spanNearQuery.getClauses().length, equalTo(queryBuilder.clauses().size()));
    Iterator<SpanQueryBuilder> spanQueryBuilderIterator = queryBuilder.clauses().iterator();
    for (SpanQuery spanQuery : spanNearQuery.getClauses()) {
        assertThat(spanQuery, equalTo(spanQueryBuilderIterator.next().toQuery(context.getQueryShardContext())));
    }
}
项目:elasticsearch_my    文件:SpanOrQueryBuilderTests.java   
@Override
protected void doAssertLuceneQuery(SpanOrQueryBuilder queryBuilder, Query query, SearchContext context) throws IOException {
    assertThat(query, instanceOf(SpanOrQuery.class));
    SpanOrQuery spanOrQuery = (SpanOrQuery) query;
    assertThat(spanOrQuery.getClauses().length, equalTo(queryBuilder.clauses().size()));
    Iterator<SpanQueryBuilder> spanQueryBuilderIterator = queryBuilder.clauses().iterator();
    for (SpanQuery spanQuery : spanOrQuery.getClauses()) {
        assertThat(spanQuery, equalTo(spanQueryBuilderIterator.next().toQuery(context.getQueryShardContext())));
    }
}
项目:lams    文件:PayloadNearQuery.java   
@Override
public PayloadNearQuery clone() {
  int sz = clauses.size();
  SpanQuery[] newClauses = new SpanQuery[sz];

  for (int i = 0; i < sz; i++) {
    newClauses[i] = (SpanQuery) clauses.get(i).clone();
  }
  PayloadNearQuery boostingNearQuery = new PayloadNearQuery(newClauses, slop,
      inOrder, function);
  boostingNearQuery.setBoost(getBoost());
  return boostingNearQuery;
}
项目:lams    文件:PayloadNearQuery.java   
@Override
public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
  PayloadNearSpanScorer scorer = (PayloadNearSpanScorer) scorer(context, context.reader().getLiveDocs());
  if (scorer != null) {
    int newDoc = scorer.advance(doc);
    if (newDoc == doc) {
      float freq = scorer.freq();
      SimScorer docScorer = similarity.simScorer(stats, context);
      Explanation expl = new Explanation();
      expl.setDescription("weight("+getQuery()+" in "+doc+") [" + similarity.getClass().getSimpleName() + "], result of:");
      Explanation scoreExplanation = docScorer.explain(doc, new Explanation(freq, "phraseFreq=" + freq));
      expl.addDetail(scoreExplanation);
      expl.setValue(scoreExplanation.getValue());
      String field = ((SpanQuery)getQuery()).getField();
      // now the payloads part
      Explanation payloadExpl = function.explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
      // combined
      ComplexExplanation result = new ComplexExplanation();
      result.addDetail(expl);
      result.addDetail(payloadExpl);
      result.setValue(expl.getValue() * payloadExpl.getValue());
      result.setDescription("PayloadNearQuery, product of:");
      return result;
    }
  }

  return new ComplexExplanation(false, 0.0f, "no matching term");
}
项目:lams    文件:PayloadTermQuery.java   
@Override
public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
  PayloadTermSpanScorer scorer = (PayloadTermSpanScorer) scorer(context, context.reader().getLiveDocs());
  if (scorer != null) {
    int newDoc = scorer.advance(doc);
    if (newDoc == doc) {
      float freq = scorer.sloppyFreq();
      SimScorer docScorer = similarity.simScorer(stats, context);
      Explanation expl = new Explanation();
      expl.setDescription("weight("+getQuery()+" in "+doc+") [" + similarity.getClass().getSimpleName() + "], result of:");
      Explanation scoreExplanation = docScorer.explain(doc, new Explanation(freq, "phraseFreq=" + freq));
      expl.addDetail(scoreExplanation);
      expl.setValue(scoreExplanation.getValue());
      // now the payloads part
      // QUESTION: Is there a way to avoid this skipTo call? We need to know
      // whether to load the payload or not
      // GSI: I suppose we could toString the payload, but I don't think that
      // would be a good idea
      String field = ((SpanQuery)getQuery()).getField();
      Explanation payloadExpl = function.explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
      payloadExpl.setValue(scorer.getPayloadScore());
      // combined
      ComplexExplanation result = new ComplexExplanation();
      if (includeSpanScore) {
        result.addDetail(expl);
        result.addDetail(payloadExpl);
        result.setValue(expl.getValue() * payloadExpl.getValue());
        result.setDescription("btq, product of:");
      } else {
        result.addDetail(payloadExpl);
        result.setValue(payloadExpl.getValue());
        result.setDescription("btq(includeSpanScore=false), result of:");
      }
      result.setMatch(true); // LUCENE-1303
      return result;
    }
  }

  return new ComplexExplanation(false, 0.0f, "no matching term");
}
项目:lams    文件:SpanFirstBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  int end = DOMUtils.getAttribute(e, "end", 1);
  Element child = DOMUtils.getFirstChildElement(e);
  SpanQuery q = factory.getSpanQuery(child);

  SpanFirstQuery sfq = new SpanFirstQuery(q, end);

  sfq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
  return sfq;
}
项目:lams    文件:SpanTermBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
  String value = DOMUtils.getNonBlankTextOrFail(e);
  SpanTermQuery stq = new SpanTermQuery(new Term(fieldName, value));

  stq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
  return stq;
}
项目:lams    文件:BoostingTermBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
  String value = DOMUtils.getNonBlankTextOrFail(e);

  PayloadTermQuery btq = new PayloadTermQuery(new Term(fieldName, value), new AveragePayloadFunction());
  btq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
  return btq;
}
项目:lams    文件:SpanOrBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  List<SpanQuery> clausesList = new ArrayList<>();
  for (Node kid = e.getFirstChild(); kid != null; kid = kid.getNextSibling()) {
    if (kid.getNodeType() == Node.ELEMENT_NODE) {
      SpanQuery clause = factory.getSpanQuery((Element) kid);
      clausesList.add(clause);
    }
  }
  SpanQuery[] clauses = clausesList.toArray(new SpanQuery[clausesList.size()]);
  SpanOrQuery soq = new SpanOrQuery(clauses);
  soq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
  return soq;
}
项目:lams    文件:SpanOrTermsBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  String fieldName = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
  String value = DOMUtils.getNonBlankTextOrFail(e);

  List<SpanQuery> clausesList = new ArrayList<>();

  TokenStream ts = null;
  try {
    ts = analyzer.tokenStream(fieldName, value);
    TermToBytesRefAttribute termAtt = ts.addAttribute(TermToBytesRefAttribute.class);
    BytesRef bytes = termAtt.getBytesRef();
    ts.reset();
    while (ts.incrementToken()) {
      termAtt.fillBytesRef();
      SpanTermQuery stq = new SpanTermQuery(new Term(fieldName, BytesRef.deepCopyOf(bytes)));
      clausesList.add(stq);
    }
    ts.end();
    SpanOrQuery soq = new SpanOrQuery(clausesList.toArray(new SpanQuery[clausesList.size()]));
    soq.setBoost(DOMUtils.getAttribute(e, "boost", 1.0f));
    return soq;
  }
  catch (IOException ioe) {
    throw new ParserException("IOException parsing value:" + value);
  } finally {
    IOUtils.closeWhileHandlingException(ts);
  }
}
项目:lams    文件:SpanNearBuilder.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  String slopString = DOMUtils.getAttributeOrFail(e, "slop");
  int slop = Integer.parseInt(slopString);
  boolean inOrder = DOMUtils.getAttribute(e, "inOrder", false);
  List<SpanQuery> spans = new ArrayList<>();
  for (Node kid = e.getFirstChild(); kid != null; kid = kid.getNextSibling()) {
    if (kid.getNodeType() == Node.ELEMENT_NODE) {
      spans.add(factory.getSpanQuery((Element) kid));
    }
  }
  SpanQuery[] spanQueries = spans.toArray(new SpanQuery[spans.size()]);
  return new SpanNearQuery(spanQueries, slop, inOrder);
}
项目:lams    文件:SpanQueryBuilderFactory.java   
@Override
public SpanQuery getSpanQuery(Element e) throws ParserException {
  SpanQueryBuilder builder = builders.get(e.getNodeName());
  if (builder == null) {
    throw new ParserException("No SpanQueryObjectBuilder defined for node " + e.getNodeName());
  }
  return builder.getSpanQuery(e);
}
项目:lams    文件:SpanNearClauseFactory.java   
protected void addSpanQueryWeighted(SpanQuery sq, float weight) {
  Float w = weightBySpanQuery.get(sq);
  if (w != null)
    w = Float.valueOf(w.floatValue() + weight);
  else
    w = Float.valueOf(weight);
  weightBySpanQuery.put(sq, w); 
}
项目:lams    文件:SpanNearClauseFactory.java   
public void addSpanQuery(Query q) {
  if (q == SrndQuery.theEmptyLcnQuery)
    return;
  if (! (q instanceof SpanQuery))
    throw new AssertionError("Expected SpanQuery: " + q.toString(getFieldName()));
  addSpanQueryWeighted((SpanQuery)q, q.getBoost());
}
项目:lams    文件:SpanNearClauseFactory.java   
public SpanQuery makeSpanClause() {
  SpanQuery [] spanQueries = new SpanQuery[size()];
  Iterator<SpanQuery> sqi = weightBySpanQuery.keySet().iterator();
  int i = 0;
  while (sqi.hasNext()) {
    SpanQuery sq = sqi.next();
    sq.setBoost(weightBySpanQuery.get(sq).floatValue());
    spanQueries[i++] = sq;
  }

  if (spanQueries.length == 1)
    return spanQueries[0];
  else
    return new SpanOrQuery(spanQueries);
}
项目:lams    文件:DistanceQuery.java   
public Query getSpanNearQuery(
        IndexReader reader,
        String fieldName,
        float boost,
        BasicQueryFactory qf) throws IOException {
  SpanQuery[] spanClauses = new SpanQuery[getNrSubQueries()];
  Iterator<?> sqi = getSubQueriesIterator();
  int qi = 0;
  while (sqi.hasNext()) {
    SpanNearClauseFactory sncf = new SpanNearClauseFactory(reader, fieldName, qf);

    ((DistanceSubQuery)sqi.next()).addSpanQueries(sncf);
    if (sncf.size() == 0) { /* distance operator requires all sub queries */
      while (sqi.hasNext()) { /* produce evt. error messages but ignore results */
        ((DistanceSubQuery)sqi.next()).addSpanQueries(sncf);
        sncf.clear();
      }
      return SrndQuery.theEmptyLcnQuery;
    }

    spanClauses[qi] = sncf.makeSpanClause();
    qi++;
  }

  SpanNearQuery r = new SpanNearQuery(spanClauses, getOpDistance() - 1, subQueriesOrdered());
  r.setBoost(boost);
  return r;
}
项目:search    文件:SpanNearClauseFactory.java   
protected void addSpanQueryWeighted(SpanQuery sq, float weight) {
  Float w = weightBySpanQuery.get(sq);
  if (w != null)
    w = Float.valueOf(w.floatValue() + weight);
  else
    w = Float.valueOf(weight);
  weightBySpanQuery.put(sq, w); 
}