Java源码示例:org.apache.solr.common.params.HighlightParams

示例1
private void appendHighlightFormatOptions(HighlightOptions options, SolrQueryMethod queryMethod) {
	String formatter = queryMethod.getHighlightFormatter();
	if (formatter != null) {
		options.setFormatter(formatter);
	}
	String highlightPrefix = queryMethod.getHighlightPrefix();
	if (highlightPrefix != null) {
		if (isSimpleHighlightingOption(formatter)) {
			options.setSimplePrefix(highlightPrefix);
		} else {
			options.addHighlightParameter(new HighlightParameter(HighlightParams.TAG_PRE, highlightPrefix));
		}
	}
	String highlightPostfix = queryMethod.getHighlightPostfix();
	if (highlightPostfix != null) {
		if (isSimpleHighlightingOption(formatter)) {
			options.setSimplePostfix(highlightPostfix);
		} else {
			options.addHighlightParameter(new HighlightParameter(HighlightParams.TAG_POST, highlightPostfix));
		}
	}
}
 
示例2
@Test
public void testThatHighlightingIsApplied() {
    SolrQueryRequest req = req("q", "a",
            DisMaxParams.QF, "f1",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.FIELDS, "f1",
            HighlightParams.SIMPLE_PRE, "PRE",
            HighlightParams.SIMPLE_POST, "POST",
            "defType", "querqy",
            "debugQuery", "true");

    assertQ("Highlighting not working",
            req,
            "//lst[@name='highlighting']//arr[@name='f1']/str[text()='PREaPOST']"
    );
    req.close();

}
 
示例3
@Test
public void highlightingSnippetsFragSizeTest()
{
    SolrServletRequest req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "long",
            HighlightParams.FIELDS, "content,name,title",
            HighlightParams.SNIPPETS, "4",
            HighlightParams.FRAGSIZE, "40"),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=2]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='name']/str[.='some very <em>long</em> name']",
            "//lst[@name='highlighting']/lst[1]/arr[@name='title']/str[.='title1 is very <em>long</em>']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.='this is some <em>long</em> text.  It has the']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.=' word <em>long</em> in many places.  In fact, it has']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.=' <em>long</em> on some different fragments.  Let us']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.=' see what happens to <em>long</em> in this case.']");
}
 
示例4
@Test
public void highlightingMergeContinuousFragmentsTest()
{
    SolrServletRequest req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "'some long'",
            HighlightParams.FIELDS, "name",
            HighlightParams.MERGE_CONTIGUOUS_FRAGMENTS, "true",
            HighlightParams.SIMPLE_PRE, "{",
            HighlightParams.SIMPLE_POST, "}",
            HighlightParams.SNIPPETS, String.valueOf(4),
            HighlightParams.FRAGSIZE, String.valueOf(40)),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst/arr)=1]",
            "//lst[@name='highlighting']/lst/arr[@name='name']/str[.='this is {some} {long} text.  It has the word long in many places.  In fact, it has long on some different fragments.  Let us see what happens to long in this case.']"
    );
}
 
示例5
@Test
public void highlightingPrePostTest()
{
    SolrServletRequest req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "long",
            HighlightParams.FIELDS, "content,name,title",
            HighlightParams.SIMPLE_PRE, "<al>",
            HighlightParams.SIMPLE_POST, "<fresco>",
            HighlightParams.SNIPPETS, String.valueOf(4),
            HighlightParams.FRAGSIZE, String.valueOf(40)),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=2]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='name']/str[.='some very <al>long<fresco> name']",
            "//lst[@name='highlighting']/lst[1]/arr[@name='title']/str[.='title1 is very <al>long<fresco>']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.='this is some <al>long<fresco> text.  It has the']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.=' word <al>long<fresco> in many places.  In fact, it has']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.=' <al>long<fresco> on some different fragments.  Let us']",
            "//lst[@name='highlighting']/lst[2]/arr[@name='name']/str[.=' see what happens to <al>long<fresco> in this case.']");
}
 
示例6
@Test
public void testFacetAndHighlightWithCommonMisspellings() {
  assertQ(req(CommonParams.QT, "standardResWithCommonMisspellings", 
      CommonParams.Q, "foo:bobo AND foo:marley",
      SpellingParams.SPELLCHECK_COLLATE, "true", 
      SpellingParams.SPELLCHECK_BUILD, "true", 
      SpellingParams.SPELLCHECK_COUNT, "10", 
      SpellingParams.SPELLCHECK_EXTENDED_RESULTS, "true",
      FacetParams.FACET, "true", 
      FacetParams.FACET_FIELD, "foo", 
      FacetParams.FACET_FIELD, "id",
      FacetParams.FACET_FIELD, "bar", 
      FacetParams.FACET_QUERY, "id:[0 TO 20]", 
      FacetParams.FACET_QUERY, "id:[1 TO 100]",
      HighlightParams.HIGHLIGHT, "true", 
      HighlightParams.FIELDS, "foo",
      DymReSearcher.COMPONENT_NAME, "true",
      SpellCheckComponent.COMPONENT_NAME, "true")
      ,"//result[@name='spellchecked_response'][@numFound='3']"
      ,"//result[@name='response'][@numFound='0']"
      ,"//arr[@name='extended_spellchecker_suggestions']/str[1][.='foo:bono AND foo:marley']"
      ,"//lst[@name='spellchecked_facet_counts']/lst[@name='facet_fields']/lst[@name='foo']/int[@name='bob'][.='3']"
      ,"//lst[@name='spellchecked_facet_counts']/lst[@name='facet_fields']/lst[@name='foo']/int[@name='marley'][.='3']"
      ,"//lst[@name='spellchecked_highlighting']/lst[@name='9']/arr[@name='foo']/str[1]"
      );
}
 
示例7
@Test
public void highlightingPluralsTest()
{
    SolrServletRequest req = areq(params( "q", "name:plural", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            //HighlightParams.Q, "lon*",
            HighlightParams.FIELDS, "name",
            HighlightParams.HIGHLIGHT_MULTI_TERM, "false",
            HighlightParams.SIMPLE_PRE, "{",
            HighlightParams.SIMPLE_POST, "}",
            HighlightParams.SNIPPETS, String.valueOf(1),
            HighlightParams.FRAGSIZE, String.valueOf(100)),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=1]",
            "*[count(//lst[@name='highlighting']/lst/arr[@name='name'])=1]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='name']/str[.='MixedCabbageString and {plurals} and discussion']");
}
 
示例8
@Test
public void highlightingStemmingTest()
{
    SolrServletRequest req = areq(params( "q", "name:discuss", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            //HighlightParams.Q, "lon*",
            HighlightParams.FIELDS, "name",
            HighlightParams.HIGHLIGHT_MULTI_TERM, "false",
            HighlightParams.SIMPLE_PRE, "{",
            HighlightParams.SIMPLE_POST, "}",
            HighlightParams.SNIPPETS, String.valueOf(1),
            HighlightParams.FRAGSIZE, String.valueOf(100)),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=1]",
            "*[count(//lst[@name='highlighting']/lst/arr[@name='name'])=1]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='name']/str[.='MixedCabbageString and plurals and {discussion}']");
}
 
示例9
@Test
public void highlightingBooleanConjunctionTest()
{
    SolrServletRequest req = areq(params( "q", "title:(is AND long)", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.FIELDS, "title",
            HighlightParams.HIGHLIGHT_MULTI_TERM, "false",
            HighlightParams.SIMPLE_PRE, "{",
            HighlightParams.SIMPLE_POST, "}"),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=1]",
            "*[count(//lst[@name='highlighting']/lst/arr[@name='title'])=1]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='title']/str[.='title1 {is} very {long}']");
}
 
示例10
@Test
public void testFacetAndHighlight() {
  assertQ(req(CommonParams.QT, "standardGoodSuggestion", 
      CommonParams.Q, "foo:bobo AND foo:marley",
      SpellingParams.SPELLCHECK_COLLATE, "true", 
      SpellingParams.SPELLCHECK_BUILD, "true", 
      SpellingParams.SPELLCHECK_COUNT, "10", 
      SpellingParams.SPELLCHECK_EXTENDED_RESULTS, "true",
      FacetParams.FACET, "true", 
      FacetParams.FACET_FIELD, "foo", 
      FacetParams.FACET_FIELD, "id", 
      FacetParams.FACET_FIELD, "bar", 
      FacetParams.FACET_QUERY, "id:[0 TO 20]", 
      FacetParams.FACET_QUERY, "id:[1 TO 100]", 
      HighlightParams.HIGHLIGHT, "true", 
      HighlightParams.FIELDS, "foo",
      DymReSearcher.COMPONENT_NAME, "true",
      SpellCheckComponent.COMPONENT_NAME, "true")
      ,"//result[@name='spellchecked_response'][@numFound='7']"
      ,"//result[@name='response'][@numFound='0']"
      ,"//arr[@name='extended_spellchecker_suggestions']/str[1][.='foo:bob AND foo:marley']"
      ,"//lst[@name='spellchecked_facet_counts']/lst[@name='facet_fields']/lst[@name='foo']/int[@name='bob'][.='7']"
      ,"//lst[@name='spellchecked_facet_counts']/lst[@name='facet_fields']/lst[@name='foo']/int[@name='marley'][.='7']"
      ,"//lst[@name='spellchecked_highlighting']/lst[@name='2']/arr[@name='foo']/str[1]");
}
 
示例11
@Override
public void prepare(ResponseBuilder rb) throws IOException {
  SolrParams params = rb.req.getParams();
  rb.doHighlights = solrConfigHighlighter.isHighlightingEnabled(params);
  if(rb.doHighlights){
    rb.setNeedDocList(true);
    String hlq = params.get(HighlightParams.Q);
    String hlparser = MoreObjects.firstNonNull(params.get(HighlightParams.QPARSER),
                                            params.get(QueryParsing.DEFTYPE, QParserPlugin.DEFAULT_QTYPE));
    if(hlq != null){
      try {
        QParser parser = QParser.getParser(hlq, hlparser, rb.req);
        rb.setHighlightQuery(parser.getHighlightQuery());
      } catch (SyntaxError e) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
      }
    }
  }
}
 
示例12
@Override
public Fragmenter getFragmenter(String fieldName, SolrParams params )
{ 
  numRequests.inc();
  params = SolrParams.wrapDefaults(params, defaults);

  int fragsize  = params.getFieldInt(   fieldName, HighlightParams.FRAGSIZE,  LuceneRegexFragmenter.DEFAULT_FRAGMENT_SIZE );
  int increment = params.getFieldInt(   fieldName, HighlightParams.INCREMENT, LuceneRegexFragmenter.DEFAULT_INCREMENT_GAP );
  float slop    = params.getFieldFloat( fieldName, HighlightParams.SLOP,      LuceneRegexFragmenter.DEFAULT_SLOP );
  int maxchars  = params.getFieldInt(   fieldName, HighlightParams.MAX_RE_CHARS, LuceneRegexFragmenter.DEFAULT_MAX_ANALYZED_CHARS );
  String rawpat = params.getFieldParam( fieldName, HighlightParams.PATTERN,   LuceneRegexFragmenter.DEFAULT_PATTERN_RAW );

  Pattern p = rawpat == defaultPatternRaw ? defaultPattern : Pattern.compile(rawpat);

  if( fragsize <= 0 ) {
    return new NullFragmenter();
  }
  
  return new LuceneRegexFragmenter( fragsize, increment, slop, maxchars, p );
}
 
示例13
@Test
public void testThatHighlightingIsNotAppliedToBoostQuery() {
    SolrQueryRequest req = req("q", "o",
            DisMaxParams.QF, "f1",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.FIELDS, "f1",
            HighlightParams.SIMPLE_PRE, "PRE",
            HighlightParams.SIMPLE_POST, "POST",
            "defType", "querqy",
            "debugQuery", "true");

    assertQ("UP token is highlighted",
            req,
            "//lst[@name='highlighting']//arr[@name='f1']/str[not(contains(.,'PREuPOST'))]"
    );
    req.close();

}
 
示例14
/**
 * Return a {@link org.apache.lucene.search.highlight.QueryScorer} suitable for this Query and field.
 *
 * @param query       The current query
 * @param tokenStream document text tokenStream that implements reset() efficiently (e.g. CachingTokenFilter).
 *                    If it's used, call reset() first.
 * @param fieldName   The name of the field
 * @param request     The SolrQueryRequest
 */
protected QueryScorer getSpanQueryScorer(Query query, String fieldName, TokenStream tokenStream, SolrQueryRequest request) {
  QueryScorer scorer = new QueryScorer(query,
          request.getParams().getFieldBool(fieldName, HighlightParams.FIELD_MATCH, false) ? fieldName : null) {
    @Override
    protected WeightedSpanTermExtractor newTermExtractor(String defaultField) {
      return new CustomSpanTermExtractor(defaultField);
    }
  };
  scorer.setExpandMultiTermQuery(request.getParams().getBool(HighlightParams.HIGHLIGHT_MULTI_TERM, true));

  boolean defaultPayloads = true;//overwritten below
  try {
    // It'd be nice to know if payloads are on the tokenStream but the presence of the attribute isn't a good
    // indicator.
    final Terms terms = request.getSearcher().getSlowAtomicReader().terms(fieldName);
    if (terms != null) {
      defaultPayloads = terms.hasPayloads();
    }
  } catch (IOException e) {
    log.error("Couldn't check for existence of payloads", e);
  }
  scorer.setUsePayloads(request.getParams().getFieldBool(fieldName, HighlightParams.PAYLOADS, defaultPayloads));
  return scorer;
}
 
示例15
@Test
public void testThatHighlightingIsAppliedToSynonyms() {
    SolrQueryRequest req = req("q", "o",
            DisMaxParams.QF, "f1",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.FIELDS, "f1",
            HighlightParams.SIMPLE_PRE, "PRE",
            HighlightParams.SIMPLE_POST, "POST",
            "defType", "querqy",
            "debugQuery", "true");

    assertQ("UP token is highlighted",
            req,
            "//lst[@name='highlighting']//arr[@name='f1']/str[contains(.,'PREsPOST')]"
    );
    req.close();

}
 
示例16
/** Highlights and returns the highlight object for this field -- a String[] by default.  Null if none. */
@SuppressWarnings("unchecked")
protected Object doHighlightingByFastVectorHighlighter(SolrDocument doc, int docId,
                                                       SchemaField schemaField, FvhContainer fvhContainer,
                                                       IndexReader reader, SolrQueryRequest req) throws IOException {
  SolrParams params = req.getParams();
  String fieldName = schemaField.getName();
  SolrFragmentsBuilder solrFb = getSolrFragmentsBuilder(fieldName, params);

  String[] snippets = fvhContainer.fvh.getBestFragments(fvhContainer.fieldQuery, reader, docId, fieldName,
          params.getFieldInt(fieldName, HighlightParams.FRAGSIZE, 100),
          params.getFieldInt(fieldName, HighlightParams.SNIPPETS, 1),
          getFragListBuilder(fieldName, params),
          getFragmentsBuilder(fieldName, params),
          solrFb.getPreTags(params, fieldName),
          solrFb.getPostTags(params, fieldName),
          getEncoder(fieldName, params));
  if (snippets != null && snippets.length > 0)
    return snippets;
  return null;
}
 
示例17
@Override
protected UnifiedHighlighter getHighlighter(SolrQueryRequest req) {
  // Adjust the highlight parameters to match what the old PostingsHighlighter had.
  ModifiableSolrParams invariants = new ModifiableSolrParams();
  invariants.set(HighlightParams.OFFSET_SOURCE, "POSTINGS");
  invariants.set(HighlightParams.FIELD_MATCH, true);
  invariants.set(HighlightParams.USE_PHRASE_HIGHLIGHTER, false);
  invariants.set(HighlightParams.FRAGSIZE, -1);

  ModifiableSolrParams defaults = new ModifiableSolrParams();
  defaults.set(HighlightParams.DEFAULT_SUMMARY, true);
  defaults.set(HighlightParams.TAG_ELLIPSIS, "... ");

  SolrParams newParams = SolrParams.wrapDefaults(
      invariants,// this takes precedence
      SolrParams.wrapDefaults(
          req.getParams(), // then this (original)
          defaults // finally our defaults
      )
  );
  try (LocalSolrQueryRequest fakeReq = new LocalSolrQueryRequest(req.getCore(), newParams)) {
    return super.getHighlighter(fakeReq);
  }
}
 
示例18
@Override
public NamedList<Object> doHighlighting(DocList docs, Query query, SolrQueryRequest req, String[] defaultFields) throws IOException {
  final SolrParams params = req.getParams();

  // if highlighting isn't enabled, then why call doHighlighting?
  if (!isHighlightingEnabled(params))
    return null;

  int[] docIDs = toDocIDs(docs);

  // fetch the unique keys
  String[] keys = getUniqueKeys(req.getSearcher(), docIDs);

  // query-time parameters
  String[] fieldNames = getHighlightFields(query, req, defaultFields);

  int maxPassages[] = new int[fieldNames.length];
  for (int i = 0; i < fieldNames.length; i++) {
    maxPassages[i] = params.getFieldInt(fieldNames[i], HighlightParams.SNIPPETS, 1);
  }

  UnifiedHighlighter highlighter = getHighlighter(req);
  Map<String, String[]> snippets = highlighter.highlightFields(fieldNames, query, docIDs, maxPassages);
  return encodeSnippets(keys, fieldNames, snippets);
}
 
示例19
public SolrExtendedUnifiedHighlighter(SolrQueryRequest req) {
  super(req.getSearcher(), req.getSchema().getIndexAnalyzer());
  this.params = req.getParams();
  this.schema = req.getSchema();
  this.setMaxLength(
      params.getInt(HighlightParams.MAX_CHARS, DEFAULT_MAX_CHARS));
  this.setCacheFieldValCharsThreshold(
      params.getInt(HighlightParams.CACHE_FIELD_VAL_CHARS_THRESHOLD, DEFAULT_CACHE_CHARS_THRESHOLD));

  final RTimerTree timerTree;
  if (req.getRequestTimer() != null) { //It may be null if not used in a search context.
    timerTree = req.getRequestTimer();
  } else {
    timerTree = new RTimerTree(); // since null checks are annoying
  }
  loadFieldValuesTimer = timerTree.sub("loadFieldValues"); // we assume a new timer, state of STARTED
  loadFieldValuesTimer.pause(); // state of PAUSED now with about zero time. Will fail if state isn't STARTED.
}
 
示例20
@Test
public void payloadFilteringSpanQuery() throws IOException {
  clearIndex();

  String FIELD_NAME = "payloadDelimited";
  assertU(adoc("id", "0", FIELD_NAME, "word|7 word|2"));
  assertU(commit());

  //We search at a lower level than typical Solr tests because there's no QParser for payloads

  //Create query matching this payload
  Query query = new SpanPayloadCheckQuery(new SpanTermQuery(new Term(FIELD_NAME, "word")),
      Collections.singletonList(new BytesRef(new byte[]{0, 0, 0, 7})));//bytes for integer 7

  //invoke highlight component... the hard way
  final SearchComponent hlComp = h.getCore().getSearchComponent("highlight");
  SolrQueryRequest req = req("hl", "true", "hl.fl", FIELD_NAME, HighlightParams.USE_PHRASE_HIGHLIGHTER, "true");
  try {
    SolrQueryResponse resp = new SolrQueryResponse();
    ResponseBuilder rb = new ResponseBuilder(req, resp, Collections.singletonList(hlComp));
    rb.setHighlightQuery(query);
    rb.setResults(req.getSearcher().getDocListAndSet(query, (DocSet) null, null, 0, 1));
    //highlight:
    hlComp.prepare(rb);
    hlComp.process(rb);
    //inspect response
    final String[] snippets = (String[]) resp.getValues().findRecursive("highlighting", "0", FIELD_NAME);
    assertEquals("<em>word|7</em> word|2", snippets[0]);
  } finally {
    req.close();
  }
}
 
示例21
private void rewriteLocalFieldParameters(ModifiableSolrParams newParams, SolrParams previousParams, String fieldName, String schemaFieldName)
{
	rewriteHighlightFieldOptions(newParams, previousParams, HighlightParams.SIMPLE_PRE, fieldName, schemaFieldName);
	rewriteHighlightFieldOptions(newParams, previousParams, HighlightParams.SIMPLE_POST, fieldName, schemaFieldName);
	rewriteHighlightFieldOptions(newParams, previousParams, HighlightParams.FRAGSIZE, fieldName, schemaFieldName);
	rewriteHighlightFieldOptions(newParams, previousParams, HighlightParams.MERGE_CONTIGUOUS_FRAGMENTS, fieldName, schemaFieldName);
	rewriteHighlightFieldOptions(newParams, previousParams, HighlightParams.SNIPPETS, fieldName, schemaFieldName);
}
 
示例22
@Test
public void highlightingPhraseQueriesTest()
{
    //Phrase hightling is on by default
    SolrServletRequest req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "\"some long\"",
            HighlightParams.FIELDS, "name",
            HighlightParams.SIMPLE_PRE, "(",
            HighlightParams.SIMPLE_POST, ")",
            HighlightParams.SNIPPETS, String.valueOf(1),
            HighlightParams.FRAGSIZE, String.valueOf(100)),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "//lst[@name='highlighting']/lst/arr/str[.='this is (some) (long) text.  It has the word long in many places.  In fact, it has long on some']");

    req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "\"some long\"",
            HighlightParams.FIELDS, "name",
            HighlightParams.USE_PHRASE_HIGHLIGHTER, "false",
            HighlightParams.SIMPLE_PRE, "(",
            HighlightParams.SIMPLE_POST, ")",
            HighlightParams.SNIPPETS, String.valueOf(1),
            HighlightParams.FRAGSIZE, String.valueOf(100)),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "//lst[@name='highlighting']/lst/arr/str[.='(some) very (long) name']",
            "//lst[@name='highlighting']/lst/arr/str[.='this is (some) (long) text.  It has the word (long) in many places.  In fact, it has (long) on (some)']");
}
 
示例23
@Override
protected PassageFormatter getFormatter(String fieldName) {
  String preTag = params.getFieldParam(fieldName, HighlightParams.TAG_PRE,
      params.getFieldParam(fieldName, HighlightParams.SIMPLE_PRE, "<em>")
  );

  String postTag = params.getFieldParam(fieldName, HighlightParams.TAG_POST,
      params.getFieldParam(fieldName, HighlightParams.SIMPLE_POST, "</em>")
  );
  String ellipsis = params.getFieldParam(fieldName, HighlightParams.TAG_ELLIPSIS, SNIPPET_SEPARATOR);
  String encoder = params.getFieldParam(fieldName, HighlightParams.ENCODER, "simple");
  return new DefaultPassageFormatter(preTag, postTag, ellipsis, "html".equals(encoder));
}
 
示例24
@Test
public void highlightingRequiredFieldsTest()
{
   SolrServletRequest req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "long",
            HighlightParams.FIELDS, "name,title",
            HighlightParams.SIMPLE_PRE, "{",
            HighlightParams.SIMPLE_POST, "}"),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=2]",
            "*[count(//lst[@name='highlighting']/lst/arr[@name='title'])=1]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='title']/str[.='title1 is very {long}']");

    req = areq(params( "q", "name:long OR title:long", "qt", "/afts", "start", "0", "rows", "5",
            HighlightParams.HIGHLIGHT, "true",
            HighlightParams.Q, "title:long",
            HighlightParams.FIELDS, "name,title",
            HighlightParams.FIELD_MATCH, "true",
            HighlightParams.SIMPLE_PRE, "{",
            HighlightParams.SIMPLE_POST, "}"),
            "{\"locales\":[\"en\"], \"tenants\": [ \"\" ]}");

    assertQ(req,
            "*[count(//lst[@name='highlighting']/lst)=2]",
            "*[count(//lst[@name='highlighting']/lst/arr[@name='title'])=1]",
            "*[count(//lst[@name='highlighting']/lst/arr[@name='name'])=0]",
            "//lst[@name='highlighting']/lst[1]/arr[@name='title']/str[.='title1 is very {long}']");
}
 
示例25
/**
 * parse custom separator char for {@link CustomSeparatorBreakIterator}
 */
protected char parseBiSepChar(String sepChar) {
  if (sepChar == null) {
    throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, HighlightParams.BS_SEP + " not passed");
  }
  if (sepChar.length() != 1) {
    throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, HighlightParams.BS_SEP +
        " must be a single char but got: '" + sepChar + "'");
  }
  return sepChar.charAt(0);
}
 
示例26
/** remove a field for highlighting
 * 
 * @param f field name to not highlight
 * @return <i>true</i>, if removed, <br> <i>false</i>, otherwise
 */
public boolean removeHighlightField(String f) {
  boolean b = this.remove(HighlightParams.FIELDS, f);
  if (this.get(HighlightParams.FIELDS) == null) {
    this.setHighlight(false);
  }
  return b;
}
 
示例27
@Override
protected OffsetSource getOffsetSource(String field) {
  String sourceStr = params.getFieldParam(field, HighlightParams.OFFSET_SOURCE);
  if (sourceStr != null) {
    return OffsetSource.valueOf(sourceStr.toUpperCase(Locale.ROOT));
  } else {
    return super.getOffsetSource(field);
  }
}
 
示例28
public SolrQuery setHighlight(boolean b) {
  if (b) {
    this.set(HighlightParams.HIGHLIGHT, true);
  } else {
    this.remove(HighlightParams.HIGHLIGHT);
    this.remove(HighlightParams.FIELD_MATCH);
    this.remove(HighlightParams.FIELDS);
    this.remove(HighlightParams.FORMATTER);
    this.remove(HighlightParams.FRAGSIZE);
    this.remove(HighlightParams.SIMPLE_POST);
    this.remove(HighlightParams.SIMPLE_PRE);
    this.remove(HighlightParams.SNIPPETS);
  }
  return this;
}
 
示例29
protected SolrHighlighter getHighlighter(SolrParams params) {
  HighlightMethod method = HighlightMethod.parse(params.get(HighlightParams.METHOD));
  if (method == null) {
    return solrConfigHighlighter;
  }

  switch (method) {
    case UNIFIED:
      if (solrConfigHighlighter instanceof UnifiedSolrHighlighter) {
        return solrConfigHighlighter;
      }
      return new UnifiedSolrHighlighter(); // TODO cache one?
    case POSTINGS:
      if (solrConfigHighlighter instanceof PostingsSolrHighlighter) {
        return solrConfigHighlighter;
      }
      return new PostingsSolrHighlighter(); // TODO cache one?
    case FAST_VECTOR: // fall-through
    case ORIGINAL:
      if (solrConfigHighlighter instanceof DefaultSolrHighlighter) {
        return solrConfigHighlighter;
      } else {
        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
            "In order to use " + HighlightParams.METHOD + "=" + method.getMethodName() + " the configured" +
                " highlighter in solrconfig must be " + DefaultSolrHighlighter.class);
      }
    default: throw new AssertionError();
  }
}
 
示例30
@Override
public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) {
  if (!rb.doHighlights) return;

  // Turn on highlighting only only when retrieving fields
  if ((sreq.purpose & ShardRequest.PURPOSE_GET_FIELDS) != 0) {
      sreq.purpose |= ShardRequest.PURPOSE_GET_HIGHLIGHTS;
      // should already be true...
      sreq.params.set(HighlightParams.HIGHLIGHT, "true");      
  } else {
    sreq.params.set(HighlightParams.HIGHLIGHT, "false");      
  }
}