List of usage examples for org.apache.lucene.search Explanation toString
@Override
public String toString()
From source file:TopHitsTests.java
License:Apache License
@Test public void testFetchFeatures() { SearchResponse response = client().prepareSearch("idx").setTypes("type") .setQuery(matchQuery("text", "text").queryName("test")) .addAggregation(terms("terms").executionHint(randomExecutionHint()).field(TERMS_AGGS_FIELD) .subAggregation(topHits("hits").setSize(1).addHighlightedField("text").setExplain(true) .addFieldDataField("field1").addScriptField("script", "doc['field1'].value") .setFetchSource("text", null).setVersion(true))) .get();// w ww . java 2 s. c o m assertSearchResponse(response); Terms terms = response.getAggregations().get("terms"); assertThat(terms, notNullValue()); assertThat(terms.getName(), equalTo("terms")); assertThat(terms.getBuckets().size(), equalTo(5)); for (Terms.Bucket bucket : terms.getBuckets()) { TopHits topHits = bucket.getAggregations().get("hits"); SearchHits hits = topHits.getHits(); assertThat(hits.totalHits(), equalTo(10l)); assertThat(hits.getHits().length, equalTo(1)); SearchHit hit = hits.getAt(0); HighlightField highlightField = hit.getHighlightFields().get("text"); assertThat(highlightField.getFragments().length, equalTo(1)); assertThat(highlightField.getFragments()[0].string(), equalTo("some <em>text</em> to entertain")); Explanation explanation = hit.explanation(); assertThat(explanation.toString(), containsString("text:text")); long version = hit.version(); assertThat(version, equalTo(1l)); assertThat(hit.matchedQueries()[0], equalTo("test")); SearchHitField field = hit.field("field1"); assertThat(field.getValue().toString(), equalTo("5")); field = hit.field("script"); assertThat(field.getValue().toString(), equalTo("5")); assertThat(hit.sourceAsMap().size(), equalTo(1)); assertThat(hit.sourceAsMap().get("text").toString(), equalTo("some text to entertain")); } }
From source file:aos.lucene.search.msc.Explainer.java
License:Apache License
public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Usage: Explainer <index dir> <query>"); System.exit(1);/*from www. j a va 2s. c o m*/ } String indexDir = args[0]; String queryExpression = args[1]; Directory directory = FSDirectory.open(new File(indexDir)); QueryParser parser = new QueryParser(Version.LUCENE_46, "contents", new SimpleAnalyzer()); Query query = parser.parse(queryExpression); LOGGER.info("Query: " + queryExpression); IndexSearcher searcher = new IndexSearcher(directory); TopDocs topDocs = searcher.search(query, 10); for (ScoreDoc match : topDocs.scoreDocs) { Explanation explanation = searcher.explain(query, match.doc); //#A LOGGER.info("----------"); Document doc = searcher.doc(match.doc); LOGGER.info(doc.get("title")); LOGGER.info(explanation.toString()); //#B } searcher.close(); directory.close(); }
From source file:at.ac.univie.mminf.luceneSKOS.util.TestUtil.java
License:Apache License
public static void explainQuery(IndexSearcher searcher, Query query) throws IOException { TopDocs topDocs = searcher.search(query, 10); for (ScoreDoc match : topDocs.scoreDocs) { Explanation explanation = searcher.explain(query, match.doc); System.out.println("---------------"); System.out.println(explanation.toString()); }//from w ww . j av a2 s .c o m }
From source file:cn.b2b.index.product.index.ProductQueryOptimizer.java
@Override public Writable explain(IndexSearcher searcher, Writable param) throws Exception { ExplainParam queryParam = (ExplainParam) param; Query oriquery = queryParam.getQuery(); BooleanQuery original = QueryFilters.filter(oriquery, Constants.SLOP_SCORE_CVM_CLASS); BooleanQuery query = new BooleanQuery(); BooleanQuery filterQuery = null;//from w w w . j a v a 2 s. c om BooleanClause[] clauses = original.getClauses(); for (int i = 0; i < clauses.length; i++) { BooleanClause c = clauses[i]; if (c.isRequired() // required && c.getQuery().getBoost() == 0.0f // boost is zero && c.getQuery() instanceof TermQuery // TermQuery && (searcher.docFreq(((TermQuery) c.getQuery()).getTerm()) / (float) searcher.maxDoc()) >= threshold) { // check threshold if (filterQuery == null) filterQuery = new BooleanQuery(); // lucene1.4.3 -> lucene2.0.0 // filterQuery.add(c.getQuery(), true, false); // filter it filterQuery.add(c.getQuery(), BooleanClause.Occur.MUST); // filter // it } else { query.add(c); // query it } } Filter filter = null; if (filterQuery != null) { synchronized (cache) { // check cache filter = (Filter) cache.get(filterQuery); } if (filter == null) { // miss filter = new QueryFilter(filterQuery); // construct new entry synchronized (cache) { cache.put(filterQuery, filter); // cache it } } } ScoreParam scoreParam = new ScoreParam(); // store segment query word query.setQueryStr(original.getQueryStr()); float[] ranks = (float[]) MemoryFieldCache.get("rank"); Explanation explain = searcher.explain(query, queryParam.getDoc()); return new UTF8("RANK:" + ranks[queryParam.getDoc()] + "\t" + explain.toString()); }
From source file:com.difference.historybook.index.lucene.LuceneIndex.java
License:Apache License
@Override public SearchResultWrapper search(String collection, String query, int offset, int size, boolean includeDebug) throws IndexException { try {/* ww w . j a v a 2 s . c o m*/ //TODO: make age be a component in the ranking? BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder(); queryBuilder.add(parser.parse(query), Occur.MUST); queryBuilder.add(new TermQuery(new Term(IndexDocumentAdapter.FIELD_COLLECTION, collection)), Occur.FILTER); Query baseQuery = queryBuilder.build(); FunctionQuery boostQuery = new FunctionQuery( new ReciprocalFloatFunction(new DurationValueSource(new Date().getTime() / 1000, new LongFieldSource(IndexDocumentAdapter.FIELD_TIMESTAMP)), RECIP, 1F, 1F)); Query q = new CustomScoreQuery(baseQuery, boostQuery); QueryScorer queryScorer = new QueryScorer(q, IndexDocumentAdapter.FIELD_SEARCH); Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer); Highlighter highlighter = new Highlighter(queryScorer); highlighter.setTextFragmenter(fragmenter); GroupingSearch gsearch = new GroupingSearch(IndexDocumentAdapter.FIELD_URL_GROUP).setGroupDocsLimit(1) .setAllGroups(true).setIncludeMaxScore(true); TopGroups<?> groups = gsearch.search(searcher, q, offset, size); ArrayList<SearchResult> results = new ArrayList<>(size); for (int i = offset; i < offset + size && i < groups.groups.length; i++) { ScoreDoc scoreDoc = groups.groups[i].scoreDocs[0]; Document luceneDoc = searcher.doc(scoreDoc.doc); IndexDocumentAdapter doc = new IndexDocumentAdapter(luceneDoc); TokenStream tokenStream = TokenSources.getTokenStream(IndexDocumentAdapter.FIELD_SEARCH, reader.getTermVectors(scoreDoc.doc), luceneDoc.get(IndexDocumentAdapter.FIELD_SEARCH), analyzer, highlighter.getMaxDocCharsToAnalyze() - 1); String[] snippets = highlighter.getBestFragments(tokenStream, luceneDoc.get(IndexDocumentAdapter.FIELD_SEARCH), 3); String snippet = Arrays.asList(snippets).stream().collect(Collectors.joining("\n")); snippet = Jsoup.clean(snippet, Whitelist.simpleText()); String debugInfo = null; if (includeDebug) { Explanation explanation = searcher.explain(q, scoreDoc.doc); debugInfo = explanation.toString(); } results.add(new SearchResult(doc.getKey(), doc.getCollection(), doc.getTitle(), doc.getUrl(), doc.getDomain(), doc.getTimestampText(), snippet, debugInfo, scoreDoc.score)); } SearchResultWrapper wrapper = new SearchResultWrapper().setQuery(query).setOffset(offset) .setMaxResultsRequested(size) .setResultCount(groups.totalGroupCount != null ? groups.totalGroupCount : 0) .setResults(results); if (includeDebug) { wrapper.setDebugInfo(q.toString()); } return wrapper; } catch (IOException | ParseException | InvalidTokenOffsetsException e) { LOG.error(e.getLocalizedMessage()); throw new IndexException(e); } }
From source file:com.jaeksoft.searchlib.index.ReaderLocal.java
License:Open Source License
@Override public String explain(AbstractRequest request, int docId, boolean bHtml) throws SearchLibException { try {// ww w .j a va 2s.com Query query = request.getQuery(); if (query == null) return "No explanation available"; Explanation explanation = indexSearcher.explain(query, docId); if (bHtml) return explanation.toHtml(); else return explanation.toString(); } catch (IOException e) { throw new SearchLibException(e); } catch (ParseException e) { throw new SearchLibException(e); } catch (SyntaxError e) { throw new SearchLibException(e); } }
From source file:com.leavesfly.lia.searching.Explainer.java
License:Apache License
public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Usage: Explainer <index dir> <query>"); System.exit(1);/*from w w w . jav a 2 s . co m*/ } String indexDir = args[0]; String queryExpression = args[1]; Directory directory = FSDirectory.open(new File(indexDir)); QueryParser parser = new QueryParser(Version.LUCENE_30, "contents", new SimpleAnalyzer()); Query query = parser.parse(queryExpression); System.out.println("Query: " + queryExpression); IndexSearcher searcher = new IndexSearcher(directory); TopDocs topDocs = searcher.search(query, 10); for (ScoreDoc match : topDocs.scoreDocs) { Explanation explanation = searcher.explain(query, match.doc); //#A System.out.println("----------"); Document doc = searcher.doc(match.doc); System.out.println(doc.get("title")); System.out.println(explanation.toString()); //#B } searcher.close(); directory.close(); }
From source file:com.liferay.portal.search.lucene.LuceneIndexSearcherImpl.java
License:Open Source License
protected Hits toHits(org.apache.lucene.search.IndexSearcher indexSearcher, HitDocs hitDocs, Query query, long startTime, float searchTime, int start, int end) throws IOException, ParseException { int length = hitDocs.getTotalHits(); if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS)) { start = 0;// ww w.ja va 2s. co m end = length; } String[] queryTerms = getQueryTerms(query); IndexReader indexReader = indexSearcher.getIndexReader(); List<String> indexedFieldNames = new ArrayList<String>( indexReader.getFieldNames(IndexReader.FieldOption.INDEXED)); org.apache.lucene.search.Query luceneQuery = (org.apache.lucene.search.Query) QueryTranslatorUtil .translate(query); int scoredFieldNamesCount = LuceneHelperUtil.countScoredFieldNames(luceneQuery, ArrayUtil.toStringArray(indexedFieldNames.toArray())); Hits hits = new HitsImpl(); if ((start > -1) && (start <= end)) { if (end > length) { end = length; } if (start > end) { start = end; } int subsetTotal = end - start; if (subsetTotal > PropsValues.INDEX_SEARCH_LIMIT) { subsetTotal = PropsValues.INDEX_SEARCH_LIMIT; } List<Document> subsetDocs = new ArrayList<Document>(subsetTotal); List<String> subsetSnippets = new ArrayList<String>(subsetTotal); List<Float> subsetScores = new ArrayList<Float>(subsetTotal); QueryConfig queryConfig = query.getQueryConfig(); for (int i = start; i < end; i++) { if (i >= PropsValues.INDEX_SEARCH_LIMIT) { break; } int docId = hitDocs.getDocId(i); org.apache.lucene.document.Document document = indexSearcher.doc(docId); Document subsetDocument = getDocument(document); String subsetSnippet = StringPool.BLANK; if (queryConfig.isHighlightEnabled()) { subsetSnippet = getSnippet(document, query, Field.CONTENT, queryConfig.getLocale()); } subsetDocument.addText(Field.SNIPPET, subsetSnippet); subsetSnippets.add(subsetSnippet); subsetDocs.add(subsetDocument); Float subsetScore = hitDocs.getScore(i); if (scoredFieldNamesCount > 0) { subsetScore = subsetScore / scoredFieldNamesCount; } subsetScores.add(subsetScore); if (_log.isDebugEnabled()) { try { Explanation explanation = indexSearcher.explain(luceneQuery, docId); _log.debug(explanation.toString()); } catch (Exception e) { } } } hits.setStart(startTime); hits.setSearchTime(searchTime); hits.setQuery(query); hits.setQueryTerms(queryTerms); hits.setDocs(subsetDocs.toArray(new Document[subsetDocs.size()])); hits.setLength(length); hits.setSnippets(subsetSnippets.toArray(new String[subsetSnippets.size()])); hits.setScores(subsetScores.toArray(new Float[subsetScores.size()])); } return hits; }
From source file:com.mathworks.xzheng.searching.Explainer.java
License:Apache License
public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Usage: Explainer <index dir> <query>"); System.exit(1);//from www . ja v a 2s . c o m } String indexDir = args[0]; String queryExpression = args[1]; Directory directory = FSDirectory.open(new File(indexDir)); QueryParser parser = new QueryParser(Version.LUCENE_46, "contents", new SimpleAnalyzer(Version.LUCENE_46)); Query query = parser.parse(queryExpression); System.out.println("Query: " + queryExpression); IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(directory)); TopDocs topDocs = searcher.search(query, 10); for (ScoreDoc match : topDocs.scoreDocs) { Explanation explanation = searcher.explain(query, match.doc); //#A System.out.println("----------"); Document doc = searcher.doc(match.doc); System.out.println(doc.get("title")); System.out.println(explanation.toString()); //#B } directory.close(); }
From source file:com.o19s.es.explore.ExplorerQueryTests.java
License:Apache License
public void testQuery() throws Exception { Query q = new TermQuery(new Term("text", "cow")); String statsType = "sum_raw_tf"; ExplorerQuery eq = new ExplorerQuery(q, statsType); // Basic query check, should match 2 docs assertThat(searcher.count(eq), equalTo(2)); // Verify explain TopDocs docs = searcher.search(eq, 4); Explanation explanation = searcher.explain(eq, docs.scoreDocs[0].doc); assertThat(explanation.toString().trim(), equalTo("1.0 = Stat Score: sum_raw_tf")); }