org.apache.lucene.search.DoubleValuesSource Java Examples
The following examples show how to use
org.apache.lucene.search.DoubleValuesSource.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: FunctionScoreQuery.java From lucene-solr with Apache License 2.0 | 6 votes |
@Override public Scorer scorer(LeafReaderContext context) throws IOException { Scorer in = inner.scorer(context); if (in == null) return null; DoubleValues scores = valueSource.getValues(context, DoubleValuesSource.fromScorer(in)); return new FilterScorer(in) { @Override public float score() throws IOException { if (scores.advanceExact(docID())) { double factor = scores.doubleValue(); if (factor >= 0) { return (float) (factor * boost); } } // default: missing value, negative value or NaN return 0; } @Override public float getMaxScore(int upTo) throws IOException { return Float.POSITIVE_INFINITY; } }; }
Example #2
Source File: TestTaxonomyFacetSumValueSource.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testNoScore() throws Exception { Directory indexDir = newDirectory(); Directory taxoDir = newDirectory(); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir); IndexWriter iw = new IndexWriter(indexDir, newIndexWriterConfig(new MockAnalyzer(random()))); FacetsConfig config = new FacetsConfig(); for (int i = 0; i < 4; i++) { Document doc = new Document(); doc.add(new NumericDocValuesField("price", (i+1))); doc.add(new FacetField("a", Integer.toString(i % 2))); iw.addDocument(config.build(taxoWriter, doc)); } DirectoryReader r = DirectoryReader.open(iw); DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); FacetsCollector sfc = new FacetsCollector(); newSearcher(r).search(new MatchAllDocsQuery(), sfc); Facets facets = new TaxonomyFacetSumValueSource(taxoReader, config, sfc, DoubleValuesSource.fromLongField("price")); assertEquals("dim=a path=[] value=10.0 childCount=2\n 1 (6.0)\n 0 (4.0)\n", facets.getTopChildren(10, "a").toString()); iw.close(); IOUtils.close(taxoWriter, taxoReader, taxoDir, r, indexDir); }
Example #3
Source File: DerivedExpressionQuery.java From elasticsearch-learning-to-rank with Apache License 2.0 | 6 votes |
@Override public Scorer scorer(LeafReaderContext context) throws IOException { Bindings bindings = new Bindings(){ @Override public DoubleValuesSource getDoubleValuesSource(String name) { Double queryParamValue = queryParamValues.get(name); if (queryParamValue != null) { return DoubleValuesSource.constant(queryParamValue); } return new FVDoubleValuesSource(vectorSupplier, features.featureOrdinal(name)); } }; DocIdSetIterator iterator = DocIdSetIterator.all(context.reader().maxDoc()); DoubleValuesSource src = expression.getDoubleValuesSource(bindings); DoubleValues values = src.getValues(context, null); return new DValScorer(this, iterator, values); }
Example #4
Source File: TestExpressionValueSource.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testDoubleValuesSourceTypes() throws Exception { Expression expr = JavascriptCompiler.compile("2*popularity + count"); SimpleBindings bindings = new SimpleBindings(); bindings.add("popularity", DoubleValuesSource.fromLongField("popularity")); bindings.add("count", DoubleValuesSource.fromLongField("count")); DoubleValuesSource vs = expr.getDoubleValuesSource(bindings); assertEquals(1, reader.leaves().size()); LeafReaderContext leaf = reader.leaves().get(0); DoubleValues values = vs.getValues(leaf, null); assertTrue(values.advanceExact(0)); assertEquals(10, values.doubleValue(), 0); assertTrue(values.advanceExact(1)); assertEquals(41, values.doubleValue(), 0); assertTrue(values.advanceExact(2)); assertEquals(4, values.doubleValue(), 0); }
Example #5
Source File: TestFunctionScoreQuery.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testScoreModifyingSource() throws Exception { BooleanQuery bq = new BooleanQuery.Builder() .add(new TermQuery(new Term(TEXT_FIELD, "first")), BooleanClause.Occur.SHOULD) .add(new TermQuery(new Term(TEXT_FIELD, "text")), BooleanClause.Occur.SHOULD) .build(); TopDocs plain = searcher.search(bq, 1); FunctionScoreQuery fq = FunctionScoreQuery.boostByValue(bq, DoubleValuesSource.fromIntField("iii")); QueryUtils.check(random(), fq, searcher, rarely()); int[] expectedDocs = new int[]{ 4, 7, 9, 8, 12 }; TopDocs docs = searcher.search(fq, 5); assertEquals(plain.totalHits.value, docs.totalHits.value); for (int i = 0; i < expectedDocs.length; i++) { assertEquals(expectedDocs[i], docs.scoreDocs[i].doc); } Explanation expl = searcher.explain(fq, 4); assertTrue(expl.toString().contains("first")); assertTrue(expl.toString().contains("iii")); }
Example #6
Source File: AbstractSpatialFieldType.java From lucene-solr with Apache License 2.0 | 6 votes |
protected Query getQueryFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs) { T strategy = getStrategy(field.getName()); SolrParams localParams = parser.getLocalParams(); //See SOLR-2883 needScore String scoreParam = (localParams == null ? null : localParams.get(SCORE_PARAM)); //We get the valueSource for the score then the filter and combine them. DoubleValuesSource valueSource = getValueSourceFromSpatialArgs(parser, field, spatialArgs, scoreParam, strategy); if (valueSource == null) { return strategy.makeQuery(spatialArgs); //assumed constant scoring } FunctionScoreQuery functionQuery = new FunctionScoreQuery(new MatchAllDocsQuery(), valueSource); if (localParams != null && !localParams.getBool(FILTER_PARAM, true)) return functionQuery; Query filterQuery = strategy.makeQuery(spatialArgs); return new BooleanQuery.Builder() .add(functionQuery, Occur.MUST)//matches everything and provides score .add(filterQuery, Occur.FILTER)//filters (score isn't used) .build(); }
Example #7
Source File: TestFunctionScoreQuery.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testBoostsAreAppliedLast() throws Exception { SimpleBindings bindings = new SimpleBindings(); bindings.add("score", DoubleValuesSource.SCORES); Expression expr = JavascriptCompiler.compile("ln(score + 4)"); Query q1 = new FunctionScoreQuery(new TermQuery(new Term(TEXT_FIELD, "text")), expr.getDoubleValuesSource(bindings)); TopDocs plain = searcher.search(q1, 5); Query boosted = new BoostQuery(q1, 2); TopDocs afterboost = searcher.search(boosted, 5); assertEquals(plain.totalHits.value, afterboost.totalHits.value); for (int i = 0; i < 5; i++) { assertEquals(plain.scoreDocs[i].doc, afterboost.scoreDocs[i].doc); assertEquals(plain.scoreDocs[i].score, afterboost.scoreDocs[i].score / 2, 0.0001); } }
Example #8
Source File: TestFunctionScoreQuery.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testTruncateNegativeScores() throws IOException { Directory dir = newDirectory(); IndexWriter w = new IndexWriter(dir, newIndexWriterConfig()); Document doc = new Document(); doc.add(new NumericDocValuesField("foo", -2)); w.addDocument(doc); IndexReader reader = DirectoryReader.open(w); w.close(); IndexSearcher searcher = newSearcher(reader); Query q = new FunctionScoreQuery(new MatchAllDocsQuery(), DoubleValuesSource.fromLongField("foo")); QueryUtils.check(random(), q, searcher); Explanation expl = searcher.explain(q, 0); assertEquals(0, expl.getValue().doubleValue(), 0f); assertTrue(expl.toString(), expl.getDetails()[0].getDescription().contains("truncated score")); reader.close(); dir.close(); }
Example #9
Source File: TestDemoExpressions.java From lucene-solr with Apache License 2.0 | 6 votes |
/** tests same binding used more than once in an expression */ public void testTwoOfSameBinding() throws Exception { Expression expr = JavascriptCompiler.compile("_score + _score"); SimpleBindings bindings = new SimpleBindings(); bindings.add("_score", DoubleValuesSource.SCORES); Sort sort = new Sort(expr.getSortField(bindings, true)); Query query = new TermQuery(new Term("body", "contents")); TopFieldDocs td = searcher.search(query, 3, sort, true); for (int i = 0; i < 3; i++) { FieldDoc d = (FieldDoc) td.scoreDocs[i]; float expected = 2*d.score; float actual = ((Double)d.fields[0]).floatValue(); assertEquals(expected, actual, 0d); } }
Example #10
Source File: TestDemoExpressions.java From lucene-solr with Apache License 2.0 | 6 votes |
/** tests expression referring to another expression */ public void testExpressionRefersToExpression() throws Exception { Expression expr1 = JavascriptCompiler.compile("_score"); Expression expr2 = JavascriptCompiler.compile("2*expr1"); SimpleBindings bindings = new SimpleBindings(); bindings.add("_score", DoubleValuesSource.SCORES); bindings.add("expr1", expr1); Sort sort = new Sort(expr2.getSortField(bindings, true)); Query query = new TermQuery(new Term("body", "contents")); TopFieldDocs td = searcher.search(query, 3, sort, true); for (int i = 0; i < 3; i++) { FieldDoc d = (FieldDoc) td.scoreDocs[i]; float expected = 2*d.score; float actual = ((Double)d.fields[0]).floatValue(); assertEquals(expected, actual, 0d); } }
Example #11
Source File: WrappedIntPointField.java From lucene-solr with Apache License 2.0 | 6 votes |
private static DoubleValuesSource fromSortField(SortField field) { switch(field.getType()) { case INT: return DoubleValuesSource.fromIntField(field.getField()); case LONG: return DoubleValuesSource.fromLongField(field.getField()); case FLOAT: return DoubleValuesSource.fromFloatField(field.getField()); case DOUBLE: return DoubleValuesSource.fromDoubleField(field.getField()); case SCORE: return DoubleValuesSource.SCORES; default: throw new UnsupportedOperationException(); } }
Example #12
Source File: TestFunctionScoreQuery.java From lucene-solr with Apache License 2.0 | 6 votes |
public void testNaN() throws IOException { Directory dir = newDirectory(); IndexWriter w = new IndexWriter(dir, newIndexWriterConfig()); Document doc = new Document(); doc.add(new NumericDocValuesField("foo", Double.doubleToLongBits(Double.NaN))); w.addDocument(doc); IndexReader reader = DirectoryReader.open(w); w.close(); IndexSearcher searcher = newSearcher(reader); Query q = new FunctionScoreQuery(new MatchAllDocsQuery(), DoubleValuesSource.fromDoubleField("foo")); QueryUtils.check(random(), q, searcher); Explanation expl = searcher.explain(q, 0); assertEquals(0, expl.getValue().doubleValue(), 0f); assertTrue(expl.toString(), expl.getDetails()[0].getDescription().contains("NaN is an illegal score")); reader.close(); dir.close(); }
Example #13
Source File: TestExpressionSorts.java From lucene-solr with Apache License 2.0 | 6 votes |
private DoubleValuesSource fromSortField(SortField field) { switch(field.getType()) { case INT: return DoubleValuesSource.fromIntField(field.getField()); case LONG: return DoubleValuesSource.fromLongField(field.getField()); case FLOAT: return DoubleValuesSource.fromFloatField(field.getField()); case DOUBLE: return DoubleValuesSource.fromDoubleField(field.getField()); case SCORE: return DoubleValuesSource.SCORES; default: throw new UnsupportedOperationException(); } }
Example #14
Source File: TestExpressionSortField.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testEquals() throws Exception { Expression expr = JavascriptCompiler.compile("sqrt(_score) + ln(popularity)"); SimpleBindings bindings = new SimpleBindings(); bindings.add("_score", DoubleValuesSource.SCORES); bindings.add("popularity", DoubleValuesSource.fromIntField("popularity")); SimpleBindings otherBindings = new SimpleBindings(); otherBindings.add("_score", DoubleValuesSource.fromLongField("_score")); otherBindings.add("popularity", DoubleValuesSource.fromIntField("popularity")); SortField sf1 = expr.getSortField(bindings, true); // different order SortField sf2 = expr.getSortField(bindings, false); assertFalse(sf1.equals(sf2)); // different bindings sf2 = expr.getSortField(otherBindings, true); assertFalse(sf1.equals(sf2)); // different expression Expression other = JavascriptCompiler.compile("popularity/2"); sf2 = other.getSortField(bindings, true); assertFalse(sf1.equals(sf2)); // null assertFalse(sf1.equals(null)); // same instance: assertEquals(sf1, sf1); }
Example #15
Source File: PrefixTreeStrategy.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public DoubleValuesSource makeDistanceValueSource(Point queryPoint, double multiplier) { PointPrefixTreeFieldCacheProvider p = provider.get( getFieldName() ); if( p == null ) { synchronized (this) {//double checked locking idiom is okay since provider is threadsafe p = provider.get( getFieldName() ); if (p == null) { p = new PointPrefixTreeFieldCacheProvider(grid, getFieldName(), defaultFieldValuesArrayLen); provider.put(getFieldName(),p); } } } return new ShapeFieldCacheDistanceValueSource(ctx, p, queryPoint, multiplier); }
Example #16
Source File: TestExpressionRescorer.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testBasic() throws Exception { // create a sort field and sort by it (reverse order) Query query = new TermQuery(new Term("body", "contents")); IndexReader r = searcher.getIndexReader(); // Just first pass query TopDocs hits = searcher.search(query, 10); assertEquals(3, hits.totalHits.value); assertEquals("3", r.document(hits.scoreDocs[0].doc).get("id")); assertEquals("1", r.document(hits.scoreDocs[1].doc).get("id")); assertEquals("2", r.document(hits.scoreDocs[2].doc).get("id")); // Now, rescore: Expression e = JavascriptCompiler.compile("sqrt(_score) + ln(popularity)"); SimpleBindings bindings = new SimpleBindings(); bindings.add("popularity", DoubleValuesSource.fromIntField("popularity")); bindings.add("_score", DoubleValuesSource.SCORES); Rescorer rescorer = e.getRescorer(bindings); hits = rescorer.rescore(searcher, hits, 10); assertEquals(3, hits.totalHits.value); assertEquals("2", r.document(hits.scoreDocs[0].doc).get("id")); assertEquals("1", r.document(hits.scoreDocs[1].doc).get("id")); assertEquals("3", r.document(hits.scoreDocs[2].doc).get("id")); String expl = rescorer.explain(searcher, searcher.explain(query, hits.scoreDocs[0].doc), hits.scoreDocs[0].doc).toString(); // Confirm the explanation breaks out the individual // variables: assertTrue(expl.contains("= double(popularity)")); // Confirm the explanation includes first pass details: assertTrue(expl.contains("= first pass score")); assertTrue(expl.contains("body:contents in")); }
Example #17
Source File: PointVectorStrategy.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException { Weight w = inner.createWeight(searcher, scoreMode, 1f); return new ConstantScoreWeight(this, boost) { @Override public Scorer scorer(LeafReaderContext context) throws IOException { Scorer in = w.scorer(context); if (in == null) return null; DoubleValues v = distanceSource.getValues(context, DoubleValuesSource.fromScorer(in)); DocIdSetIterator approximation = in.iterator(); TwoPhaseIterator twoPhase = new TwoPhaseIterator(approximation) { @Override public boolean matches() throws IOException { return v.advanceExact(approximation.docID()) && v.doubleValue() <= limit; } @Override public float matchCost() { return 100; // distance calculation can be heavy! } }; return new ConstantScoreScorer(this, score(), scoreMode, twoPhase); } @Override public boolean isCacheable(LeafReaderContext ctx) { return distanceSource.isCacheable(ctx); } }; }
Example #18
Source File: TestIndexReaderFunctions.java From lucene-solr with Apache License 2.0 | 5 votes |
void assertHits(DoubleValuesSource vs, float scores[]) throws Exception { Query q = new FunctionScoreQuery(new MatchAllDocsQuery(), vs); ScoreDoc expected[] = new ScoreDoc[scores.length]; int expectedDocs[] = new int[scores.length]; for (int i = 0; i < expected.length; i++) { expectedDocs[i] = i; expected[i] = new ScoreDoc(i, scores[i]); } TopDocs docs = searcher.search(q, documents.size(), new Sort(new SortField("id", SortField.Type.STRING)), true); CheckHits.checkHits(random(), q, "", searcher, expectedDocs); CheckHits.checkHitsQuery(q, expected, docs.scoreDocs, expectedDocs); CheckHits.checkExplanations(q, "", searcher); assertSort(vs, expected); }
Example #19
Source File: ExpressionValueSource.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public Explanation explain(LeafReaderContext ctx, int docId, Explanation scoreExplanation) throws IOException { Explanation[] explanations = new Explanation[variables.length]; DoubleValues dv = getValues(ctx, DoubleValuesSource.constant(scoreExplanation.getValue().doubleValue()).getValues(ctx, null)); if (dv.advanceExact(docId) == false) { return Explanation.noMatch(expression.sourceText); } int i = 0; for (DoubleValuesSource var : variables) { explanations[i++] = var.explain(ctx, docId, scoreExplanation); } return Explanation.match(dv.doubleValue(), expression.sourceText + ", computed from:", explanations); }
Example #20
Source File: TestExpressionValidation.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testInvalidExternal2() throws Exception { SimpleBindings bindings = new SimpleBindings(); bindings.add("valid", DoubleValuesSource.fromIntField("valid")); bindings.add("invalid", JavascriptCompiler.compile("valid + badreference")); IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> { bindings.validate(); }); assertTrue(expected.getMessage().contains("Invalid reference")); }
Example #21
Source File: TaxonomyFacetSumValueSource.java From lucene-solr with Apache License 2.0 | 5 votes |
/** * Aggreggates float facet values from the provided * {@link DoubleValuesSource}, and pulls ordinals from the * provided {@link OrdinalsReader}. */ public TaxonomyFacetSumValueSource(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, DoubleValuesSource vs) throws IOException { super(ordinalsReader.getIndexFieldName(), taxoReader, config); this.ordinalsReader = ordinalsReader; sumValues(fc.getMatchingDocs(), fc.getKeepScores(), vs); }
Example #22
Source File: ExpressionValueSource.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public boolean isCacheable(LeafReaderContext ctx) { for (DoubleValuesSource v : variables) { if (v.isCacheable(ctx) == false) return false; } return true; }
Example #23
Source File: TestExpressionValueSource.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testRewrite() throws Exception { Expression expr = JavascriptCompiler.compile("a"); ExpressionValueSource rewritingExpressionSource = new ExpressionValueSource( new DoubleValuesSource[]{createDoubleValuesSourceMock(true)}, expr, false); ExpressionValueSource notRewritingExpressionSource = new ExpressionValueSource( new DoubleValuesSource[]{createDoubleValuesSourceMock(false)}, expr, false); assertNotSame(rewritingExpressionSource, rewritingExpressionSource.rewrite(null)); assertSame(notRewritingExpressionSource, notRewritingExpressionSource.rewrite(null)); }
Example #24
Source File: TestExpressionValidation.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testInvalidExternal() throws Exception { SimpleBindings bindings = new SimpleBindings(); bindings.add("valid", DoubleValuesSource.fromIntField("valid")); bindings.add("invalid", JavascriptCompiler.compile("badreference")); IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> { bindings.validate(); }); assertTrue(expected.getMessage().contains("Invalid reference")); }
Example #25
Source File: AbstractSpatialFieldType.java From lucene-solr with Apache License 2.0 | 5 votes |
protected DoubleValuesSource getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String score, T strategy) { if (score == null) { return null; } final double multiplier; // default multiplier for degrees switch(score) { case "": case NONE: return null; case RECIP_DISTANCE: return strategy.makeRecipDistanceValueSource(spatialArgs.getShape()); case DISTANCE: multiplier = distanceUnits.multiplierFromDegreesToThisUnit(); break; default: DistanceUnits du = parseDistanceUnits(score); if (du != null) { multiplier = du.multiplierFromDegreesToThisUnit(); } else { throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'score' local-param must be one of " + supportedScoreModes + ", it was: " + score); } } return strategy.makeDistanceValueSource(spatialArgs.getShape().getCenter(), multiplier); }
Example #26
Source File: SimpleBindings.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public DoubleValuesSource getDoubleValuesSource(String name) { if (seenFields.contains(name)) { throw new IllegalArgumentException("Recursion error: Cycle detected " + seenFields + "->" + name); } if (map.containsKey(name) == false) { throw new IllegalArgumentException("Invalid reference '" + name + "'"); } return map.get(name).apply(new CycleDetectionBindings(seenFields, name)); }
Example #27
Source File: SimpleBindings.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public DoubleValuesSource getDoubleValuesSource(String name) { if (map.containsKey(name) == false) { throw new IllegalArgumentException("Invalid reference '" + name + "'"); } return map.get(name).apply(this); }
Example #28
Source File: BBoxField.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override protected DoubleValuesSource getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String scoreParam, BBoxStrategy strategy) { if (scoreParam == null) { return null; } switch (scoreParam) { //TODO move these to superclass after LUCENE-5804 ? case OVERLAP_RATIO: double queryTargetProportion = 0.25;//Suggested default; weights towards target area String v = parser.getParam(PARAM_QUERY_TARGET_PROPORTION); if (v != null) queryTargetProportion = Double.parseDouble(v); double minSideLength = 0.0; v = parser.getParam(PARAM_MIN_SIDE_LENGTH); if (v != null) minSideLength = Double.parseDouble(v); return new BBoxOverlapRatioValueSource( strategy.makeShapeValueSource(), ctx.isGeo(), (Rectangle) spatialArgs.getShape(), queryTargetProportion, minSideLength); case AREA: return new ShapeAreaValueSource(strategy.makeShapeValueSource(), ctx, ctx.isGeo(), distanceUnits.multiplierFromDegreesToThisUnit() * distanceUnits.multiplierFromDegreesToThisUnit()); case AREA2D: return new ShapeAreaValueSource(strategy.makeShapeValueSource(), ctx, false, distanceUnits.multiplierFromDegreesToThisUnit() * distanceUnits.multiplierFromDegreesToThisUnit()); default: return super.getValueSourceFromSpatialArgs(parser, field, spatialArgs, scoreParam, strategy); } }
Example #29
Source File: FastVectorHighlighterTest.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testFunctionScoreQueryHighlight() throws IOException { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random()))); Document doc = new Document(); FieldType type = new FieldType(TextField.TYPE_STORED); type.setStoreTermVectorOffsets(true); type.setStoreTermVectorPositions(true); type.setStoreTermVectors(true); type.freeze(); Field field = new Field("field", "This is a test where foo is highlighed and should be highlighted", type); doc.add(field); writer.addDocument(doc); FastVectorHighlighter highlighter = new FastVectorHighlighter(); IndexReader reader = DirectoryReader.open(writer); int docId = 0; FieldQuery fieldQuery = highlighter.getFieldQuery( new FunctionScoreQuery(new TermQuery(new Term("field", "foo")), DoubleValuesSource.constant(1)), reader ); String[] bestFragments = highlighter.getBestFragments(fieldQuery, reader, docId, "field", 54, 1); // highlighted results are centered assertEquals("This is a test where <b>foo</b> is highlighed and should be highlighted", bestFragments[0]); bestFragments = highlighter.getBestFragments(fieldQuery, reader, docId, "field", 52, 1); assertEquals("This is a test where <b>foo</b> is highlighed and should be", bestFragments[0]); bestFragments = highlighter.getBestFragments(fieldQuery, reader, docId, "field", 30, 1); assertEquals("a test where <b>foo</b> is highlighed", bestFragments[0]); reader.close(); writer.close(); dir.close(); }
Example #30
Source File: TestDemoExpressions.java From lucene-solr with Apache License 2.0 | 5 votes |
/** an example of how to rank by an expression */ public void test() throws Exception { // compile an expression: Expression expr = JavascriptCompiler.compile("sqrt(_score) + ln(popularity)"); // we use SimpleBindings: which just maps variables to SortField instances SimpleBindings bindings = new SimpleBindings(); bindings.add("_score", DoubleValuesSource.SCORES); bindings.add("popularity", DoubleValuesSource.fromIntField("popularity")); // create a sort field and sort by it (reverse order) Sort sort = new Sort(expr.getSortField(bindings, true)); Query query = new TermQuery(new Term("body", "contents")); searcher.search(query, 3, sort); }