List of usage examples for org.apache.lucene.search.highlight QueryScorer QueryScorer
public QueryScorer(Query query, String field, String defaultField)
From source file:com.novartis.pcs.ontology.service.search.OntologySearchServiceImpl.java
License:Apache License
@Override public List<HTMLSearchResult> search(String pattern, boolean includeSynonyms) throws InvalidQuerySyntaxException { Analyzer analyzer = null;//from w w w .j a v a 2s . c o m // default QueryParser.escape(pattern) method does not support phrase queries pattern = QuerySyntaxUtil.escapeQueryPattern(pattern); if (pattern.length() < EdgeNGramTokenFilter.DEFAULT_MIN_GRAM_SIZE) { return Collections.emptyList(); } logger.log(Level.FINE, "Escaped search pattern: " + pattern); Lock lock = rwlock.readLock(); lock.lock(); if (exception != null) { lock.unlock(); throw new RuntimeException("Failed to refesh index reader after last commit", exception); } try { List<HTMLSearchResult> results = new ArrayList<HTMLSearchResult>(); analyzer = new TermNameAnalyzer(false); QueryParser parser = new QueryParser(Version.LUCENE_30, FIELD_TERM, analyzer); Query query = parser.parse(pattern); logger.log(Level.FINE, "Query: " + query); // For highlighting words in query results QueryScorer scorer = new QueryScorer(query, reader, FIELD_TERM); SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter(); SimpleHTMLEncoder htmlEncoder = new SimpleHTMLEncoder(); Highlighter highlighter = new Highlighter(htmlFormatter, htmlEncoder, scorer); highlighter.setMaxDocCharsToAnalyze(MAX_CHARS); scorer.setExpandMultiTermQuery(true); // Perform search ScoreDoc[] hits = searcher.search(query, numberOfDocuments).scoreDocs; for (int i = 0; i < hits.length; i++) { int id = hits[i].doc; Document doc = searcher.doc(id); String ontology = doc.get(FIELD_ONTOLOGY); String referenceId = doc.get(FIELD_ID); String term = doc.get(FIELD_TERM); byte[] synonymBytes = doc.getBinaryValue(FIELD_SYNONYM); boolean isSynonym = synonymBytes != null && synonymBytes.length == 1 && synonymBytes[0] == 1; if (!isSynonym || includeSynonyms) { Analyzer highlighterAnalyzer = new TermNameAnalyzer(true); TokenStream tokenStream = TokenSources.getTokenStream(reader, id, FIELD_TERM, highlighterAnalyzer); TextFragment[] frag = highlighter.getBestTextFragments(tokenStream, term, true, 1); if (frag.length > 0 && frag[0] != null && frag[0].getScore() > 0) { results.add(new HTMLSearchResult(ontology, referenceId, term, frag[0].toString(), frag[0].getScore(), isSynonym)); } highlighterAnalyzer.close(); } } return results; } catch (ParseException e) { throw new InvalidQuerySyntaxException(e.getMessage(), e); } catch (TokenMgrError e) { throw new InvalidQuerySyntaxException(e.getMessage(), e); } catch (Throwable e) { String msg = "Failed to perform Lucene seach with pattern: " + pattern; logger.log(Level.WARNING, msg, e); throw new RuntimeException(msg, e); } finally { close(analyzer); lock.unlock(); } }
From source file:lucandra.LucandraTests.java
License:Apache License
public void testHighlight() throws Exception { // This tests the TermPositionVector classes IndexReader indexReader = new IndexReader(indexName, client); IndexSearcher searcher = new IndexSearcher(indexReader); QueryParser qp = new QueryParser(Version.LUCENE_CURRENT, "key", analyzer); // check exact Query q = qp.parse("+key:\"foobar foobar\""); TopDocs docs = searcher.search(q, 10); assertEquals(1, docs.totalHits);//from w w w. j a v a2s. c o m SimpleHTMLFormatter formatter = new SimpleHTMLFormatter(); QueryScorer scorer = new QueryScorer(q, "key", text); Highlighter highlighter = new Highlighter(formatter, scorer); highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE)); TokenStream tvStream = TokenSources.getTokenStream(indexReader, docs.scoreDocs[0].doc, "key"); String rv = highlighter.getBestFragment(tvStream, text); assertNotNull(rv); assertEquals(rv, highlightedText); }
From source file:org.compass.core.lucene.engine.LuceneSearchEngineHighlighter.java
License:Apache License
protected Scorer createScorer(String propertyName) throws SearchEngineException { if (highlighterSettings.isComputeIdf()) { if (propertyName == null) { throw new SearchEngineException("When using a formatter that requires idf or setting the [" + LuceneEnvironment.Highlighter.COMPUTE_IDF + "] setting, a resource property name must be provided"); }//from ww w.j a va2 s. co m return new QueryScorer(query, indexReader, propertyName); } return new QueryScorer(query); }
From source file:uk.ac.ebi.arrayexpress.utils.saxon.search.QueryHighlighter.java
License:Apache License
public String highlightQuery(QueryInfo queryInfo, String fieldName, String text) { try {//from ww w . j a va 2 s . c om SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter(HIT_OPEN_MARK, HIT_CLOSE_MARK); Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(queryInfo.getQuery(), fieldName, this.env.defaultField)); highlighter.setTextFragmenter(new NullFragmenter()); String str = highlighter.getBestFragment(this.env.indexAnalyzer, "".equals(fieldName) ? this.env.defaultField : fieldName, text); return null != str ? str : text; } catch (Exception x) { logger.error("Caught an exception:", x); } return text; }
From source file:uk.ac.ebi.arrayexpress.utils.search.EFOExpandedHighlighter.java
License:Apache License
private String doHighlightQuery(Query query, String fieldName, String text, String openMark, String closeMark) { try {//from w ww. j a v a 2s . c o m SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter(openMark, closeMark); Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query, fieldName, this.env.defaultField)); highlighter.setTextFragmenter(new NullFragmenter()); String str = highlighter.getBestFragment(this.env.indexAnalyzer, "".equals(fieldName) ? this.env.defaultField : fieldName, text); return null != str ? str : text; } catch (Exception x) { logger.error("Caught an exception:", x); } return text; }
From source file:uk.ac.ebi.biostudies.efo.EFOExpandedHighlighter.java
License:Apache License
private String doHighlightQuery(Query query, String fieldName, String text, String openMark, String closeMark, boolean fragmentOnly) { try {//ww w . j av a2 s .c o m SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter(openMark, closeMark); QueryScorer scorer = new QueryScorer(query, fieldName, indexConfig.getDefaultField()); Highlighter highlighter = new Highlighter(htmlFormatter, scorer); highlighter.setTextFragmenter( fragmentOnly ? new SimpleSpanFragmenter(scorer, indexConfig.getSearchSnippetFragmentSize()) : new NullFragmenter()); String str = highlighter.getBestFragment(new ExperimentTextAnalyzer(), "".equals(fieldName) ? indexConfig.getDefaultField() : fieldName, text); return str; } catch (Exception x) { logger.error("Caught an exception:", x); } return text; }