Java Code Examples for org.apache.lucene.search.TopScoreDocCollector#topDocs()
The following examples show how to use
org.apache.lucene.search.TopScoreDocCollector#topDocs() .
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: MusicSearch.java From Easy-Cassandra-samples with Apache License 2.0 | 6 votes |
private List<String> returnMusics(Query query) throws IOException { int hitsPerPage = 10; IndexReader reader = DirectoryReader.open(LuceneUtil.INSTANCE.getDirectory()); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create( hitsPerPage, true); searcher.search(query, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; List<String> musics = new LinkedList<>(); for(int i=0;i<hits.length;++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); musics.add(d.get(COLUMN_NAME)); } return musics; }
Example 2
Source File: IndexDBO_classes.java From NLIWOD with GNU Affero General Public License v3.0 | 6 votes |
@Override public List<String> search(final String object) { if (stopwords.contains(object.toLowerCase())) { log.debug("\t Stopword detected: |" + object + "|"); return ImmutableList.of(); } ArrayList<String> uris = Lists.newArrayList(); try { log.debug("\t start asking index..."); Query q = new FuzzyQuery(new Term(FIELD_NAME_OBJECT, object), 0); TopScoreDocCollector collector = TopScoreDocCollector.create(numberOfDocsRetrievedFromIndex); isearcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; for (ScoreDoc hit : hits) { Document hitDoc = isearcher.doc(hit.doc); uris.add(hitDoc.get(FIELD_NAME_SUBJECT)); } log.debug("\t finished asking index..."); } catch (Exception e) { log.error(e.getLocalizedMessage() + " -> " + object, e); } return uris; }
Example 3
Source File: SearchImpl.java From lucene-solr with Apache License 2.0 | 6 votes |
private SearchResults search() throws IOException { // execute search ScoreDoc after = docs.length == 0 ? null : docs[docs.length - 1]; TopDocs topDocs; if (sort != null) { topDocs = searcher.searchAfter(after, query, pageSize, sort); } else { int hitsThreshold = exactHitsCount ? Integer.MAX_VALUE : DEFAULT_TOTAL_HITS_THRESHOLD; TopScoreDocCollector collector = TopScoreDocCollector.create(pageSize, after, hitsThreshold); searcher.search(query, collector); topDocs = collector.topDocs(); } // reset total hits for the current query this.totalHits = topDocs.totalHits; // cache search results for later use ScoreDoc[] newDocs = new ScoreDoc[docs.length + topDocs.scoreDocs.length]; System.arraycopy(docs, 0, newDocs, 0, docs.length); System.arraycopy(topDocs.scoreDocs, 0, newDocs, docs.length, topDocs.scoreDocs.length); this.docs = newDocs; return SearchResults.of(topDocs.totalHits, topDocs.scoreDocs, currentPage * pageSize, searcher, fieldsToLoad); }
Example 4
Source File: TripleIndex.java From AGDISTIS with GNU Affero General Public License v3.0 | 6 votes |
private List<Triple> getFromIndex(int maxNumberOfResults, BooleanQuery bq) throws IOException { log.debug("\t start asking index..."); TopScoreDocCollector collector = TopScoreDocCollector.create(maxNumberOfResults, true); isearcher.search(bq, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; List<Triple> triples = new ArrayList<Triple>(); String s, p, o; for (int i = 0; i < hits.length; i++) { Document hitDoc = isearcher.doc(hits[i].doc); s = hitDoc.get(FIELD_NAME_SUBJECT); p = hitDoc.get(FIELD_NAME_PREDICATE); o = hitDoc.get(FIELD_NAME_OBJECT_URI); if (o == null) { o = hitDoc.get(FIELD_NAME_OBJECT_LITERAL); } Triple triple = new Triple(s, p, o); triples.add(triple); } log.debug("\t finished asking index..."); return triples; }
Example 5
Source File: ResumeSearch.java From Easy-Cassandra-samples with Apache License 2.0 | 6 votes |
private List<String> returnResume(Query query) throws IOException { int hitsPerPage = 10; IndexReader reader = DirectoryReader.open(LuceneUtil.INSTANCE.getDirectory()); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create( hitsPerPage, true); searcher.search(query, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; List<String> resumeIDs = new LinkedList<>(); for(int i=0;i<hits.length;++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); resumeIDs.add(d.get(COLUMN_NICk_NAME)); } return resumeIDs; }
Example 6
Source File: ClassDependencyIndexCreator.java From netbeans with Apache License 2.0 | 5 votes |
static void search(String className, Indexer indexer, Collection<IndexingContext> contexts, List<? super ClassUsage> results) throws IOException { String searchString = crc32base64(className.replace('.', '/')); Query refClassQuery = indexer.constructQuery(ClassDependencyIndexCreator.FLD_NB_DEPENDENCY_CLASS.getOntology(), new StringSearchExpression(searchString)); TopScoreDocCollector collector = TopScoreDocCollector.create(NexusRepositoryIndexerImpl.MAX_RESULT_COUNT, null); for (IndexingContext context : contexts) { IndexSearcher searcher = context.acquireIndexSearcher(); try { searcher.search(refClassQuery, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; LOG.log(Level.FINER, "for {0} ~ {1} found {2} hits", new Object[] {className, searchString, hits.length}); for (ScoreDoc hit : hits) { int docId = hit.doc; Document d = searcher.doc(docId); String fldValue = d.get(ClassDependencyIndexCreator.NB_DEPENDENCY_CLASSES); LOG.log(Level.FINER, "{0} uses: {1}", new Object[] {className, fldValue}); Set<String> refClasses = parseField(searchString, fldValue, d.get(ArtifactInfo.NAMES)); if (!refClasses.isEmpty()) { ArtifactInfo ai = IndexUtils.constructArtifactInfo(d, context); if (ai != null) { ai.setRepository(context.getRepositoryId()); List<NBVersionInfo> version = NexusRepositoryIndexerImpl.convertToNBVersionInfo(Collections.singleton(ai)); if (!version.isEmpty()) { results.add(new ClassUsage(version.get(0), refClasses)); } } } } } finally { context.releaseIndexSearcher(searcher); } } }
Example 7
Source File: TestNumericRangeQuery64.java From lucene-solr with Apache License 2.0 | 5 votes |
/** we fake a double test using long2double conversion of LegacyNumericUtils */ private void testDoubleRange(int precisionStep) throws Exception { final String field="ascfield"+precisionStep; final long lower=-1000L, upper=+2000L; Query tq= LegacyNumericRangeQuery.newDoubleRange(field, precisionStep, NumericUtils.sortableLongToDouble(lower), NumericUtils.sortableLongToDouble(upper), true, true); TopScoreDocCollector collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); TopDocs tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to inclusive range length", upper-lower+1, tTopDocs.totalHits.value ); }
Example 8
Source File: TestNumericRangeQuery64.java From lucene-solr with Apache License 2.0 | 5 votes |
private void testRangeSplit(int precisionStep) throws Exception { String field="ascfield"+precisionStep; // 10 random tests int num = TestUtil.nextInt(random(), 10, 20); for (int i = 0; i < num; i++) { long lower=(long)(random().nextDouble()*noDocs - noDocs/2); long upper=(long)(random().nextDouble()*noDocs - noDocs/2); if (lower>upper) { long a=lower; lower=upper; upper=a; } // test inclusive range Query tq= LegacyNumericRangeQuery.newLongRange(field, precisionStep, lower, upper, true, true); TopScoreDocCollector collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); TopDocs tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to inclusive range length", upper-lower+1, tTopDocs.totalHits.value ); // test exclusive range tq= LegacyNumericRangeQuery.newLongRange(field, precisionStep, lower, upper, false, false); collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to exclusive range length", Math.max(upper-lower-1, 0), tTopDocs.totalHits.value ); // test left exclusive range tq= LegacyNumericRangeQuery.newLongRange(field, precisionStep, lower, upper, false, true); collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to half exclusive range length", upper-lower, tTopDocs.totalHits.value ); // test right exclusive range tq= LegacyNumericRangeQuery.newLongRange(field, precisionStep, lower, upper, true, false); collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to half exclusive range length", upper-lower, tTopDocs.totalHits.value ); } }
Example 9
Source File: TestNumericRangeQuery32.java From lucene-solr with Apache License 2.0 | 5 votes |
/** we fake a float test using int2float conversion of LegacyNumericUtils */ private void testFloatRange(int precisionStep) throws Exception { final String field="ascfield"+precisionStep; final int lower=-1000, upper=+2000; Query tq= LegacyNumericRangeQuery.newFloatRange(field, precisionStep, NumericUtils.sortableIntToFloat(lower), NumericUtils.sortableIntToFloat(upper), true, true); TopScoreDocCollector collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); TopDocs tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to inclusive range length", upper-lower+1, tTopDocs.totalHits.value ); }
Example 10
Source File: TestNumericRangeQuery32.java From lucene-solr with Apache License 2.0 | 5 votes |
private void testRangeSplit(int precisionStep) throws Exception { String field="ascfield"+precisionStep; // 10 random tests int num = TestUtil.nextInt(random(), 10, 20); for (int i =0; i< num; i++) { int lower=(int)(random().nextDouble()*noDocs - noDocs/2); int upper=(int)(random().nextDouble()*noDocs - noDocs/2); if (lower>upper) { int a=lower; lower=upper; upper=a; } // test inclusive range Query tq= LegacyNumericRangeQuery.newIntRange(field, precisionStep, lower, upper, true, true); TopScoreDocCollector collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); TopDocs tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to inclusive range length", upper-lower+1, tTopDocs.totalHits.value ); // test exclusive range tq= LegacyNumericRangeQuery.newIntRange(field, precisionStep, lower, upper, false, false); collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to exclusive range length", Math.max(upper-lower-1, 0), tTopDocs.totalHits.value ); // test left exclusive range tq= LegacyNumericRangeQuery.newIntRange(field, precisionStep, lower, upper, false, true); collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to half exclusive range length", upper-lower, tTopDocs.totalHits.value ); // test right exclusive range tq= LegacyNumericRangeQuery.newIntRange(field, precisionStep, lower, upper, true, false); collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE); searcher.search(tq, collector); tTopDocs = collector.topDocs(); assertEquals("Returned count of range query must be equal to half exclusive range length", upper-lower, tTopDocs.totalHits.value ); } }
Example 11
Source File: TestIndexWriterMaxDocs.java From lucene-solr with Apache License 2.0 | 5 votes |
@Monster("takes over two hours") public void testExactlyAtTrueLimit() throws Exception { Directory dir = newFSDirectory(createTempDir("2BDocs3")); IndexWriter iw = new IndexWriter(dir, new IndexWriterConfig(null)); Document doc = new Document(); doc.add(newStringField("field", "text", Field.Store.NO)); for (int i = 0; i < IndexWriter.MAX_DOCS; i++) { iw.addDocument(doc); /* if (i%1000000 == 0) { System.out.println((i/1000000) + " M docs..."); } */ } iw.commit(); // First unoptimized, then optimized: for(int i=0;i<2;i++) { DirectoryReader ir = DirectoryReader.open(dir); assertEquals(IndexWriter.MAX_DOCS, ir.maxDoc()); assertEquals(IndexWriter.MAX_DOCS, ir.numDocs()); IndexSearcher searcher = new IndexSearcher(ir); TopScoreDocCollector collector = TopScoreDocCollector.create(10, Integer.MAX_VALUE); searcher.search(new TermQuery(new Term("field", "text")), collector); TopDocs hits = collector.topDocs(); assertEquals(IndexWriter.MAX_DOCS, hits.totalHits.value); // Sort by docID reversed: hits = searcher.search(new TermQuery(new Term("field", "text")), 10, new Sort(new SortField(null, SortField.Type.DOC, true))); assertEquals(IndexWriter.MAX_DOCS, hits.totalHits.value); assertEquals(10, hits.scoreDocs.length); assertEquals(IndexWriter.MAX_DOCS-1, hits.scoreDocs[0].doc); ir.close(); iw.forceMerge(1); } iw.close(); dir.close(); }
Example 12
Source File: IndexDBO_properties.java From NLIWOD with GNU Affero General Public License v3.0 | 5 votes |
@Override public List<String> search(final String object) { if (stopwords.contains(object.toLowerCase())) { log.debug("\t Stopword detected: |" + object + "|"); System.out.println("returning immutable empty"); return ImmutableList.of(); } ArrayList<String> uris = Lists.newArrayList(); try { log.debug("\t start asking index for |" + object + "|"); Query q = new FuzzyQuery(new Term(FIELD_NAME_OBJECT, object), 0); TopScoreDocCollector collector = TopScoreDocCollector.create(numberOfDocsRetrievedFromIndex); isearcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; for (ScoreDoc hit : hits) { Document hitDoc = isearcher.doc(hit.doc); log.debug(object + "->" + hitDoc.get(FIELD_NAME_SUBJECT) + ", " + hitDoc.get(FIELD_NAME_OBJECT)); uris.add(hitDoc.get(FIELD_NAME_SUBJECT)); } log.debug("\t finished asking index..."); } catch (Exception e) { log.error(e.getLocalizedMessage() + " -> " + object, e); } return uris; }
Example 13
Source File: DBpediaIndex.java From NLIWOD with GNU Affero General Public License v3.0 | 5 votes |
public ArrayList<String> search(final String object) { ArrayList<String> uris = Lists.newArrayList(); try { log.debug("\t start asking index..."); // remove hyphens assertTrue // if (object.contains("-")) { // object = "\"" + object.replace("-", " ") + "\""; // } // FuzzyQuery q = new FuzzyQuery(new Term(FIELD_NAME_OBJECT, // object), 0); QueryParser qp = new QueryParser(FIELD_NAME_OBJECT, analyzer); TopScoreDocCollector collector = TopScoreDocCollector.create(numberOfDocsRetrievedFromIndex); isearcher.search(qp.createPhraseQuery(FIELD_NAME_OBJECT, object), collector); // isearcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; for (ScoreDoc hit : hits) { Document hitDoc = isearcher.doc(hit.doc); uris.add(hitDoc.get(FIELD_NAME_SUBJECT)); } log.debug("\t finished asking index..."); } catch (Exception e) { log.error(e.getLocalizedMessage() + " -> " + object, e); } return uris; }
Example 14
Source File: BibleSearchIndex.java From Quelea with GNU General Public License v3.0 | 5 votes |
/** * Search for bible chapters that match the given filter. * * @param queryString the query string to filter. * @param type ignored - may be null. * @return a list of all bible chapters that match the given filter. */ @Override public BibleChapter[] filter(String queryString, FilterType type) { String sanctifyQueryString = SearchIndexUtils.makeLuceneQuery(queryString); if(chapters.isEmpty() || sanctifyQueryString.isEmpty()) { return chapters.values().toArray(new BibleChapter[chapters.size()]); } List<BibleChapter> ret; try (DirectoryReader dr = DirectoryReader.open(index)) { IndexSearcher searcher = new IndexSearcher(dr); BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE); Query q = new ComplexPhraseQueryParser("text", analyzer).parse(sanctifyQueryString); TopScoreDocCollector collector = TopScoreDocCollector.create(10000,10000); searcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; ret = new ArrayList<>(); for(int i = 0; i < hits.length; ++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); BibleChapter chapter = chapters.get(Integer.parseInt(d.get("number"))); ret.add(chapter); } return ret.toArray(new BibleChapter[ret.size()]); } catch (ParseException | IOException ex) { LOGGER.log(Level.WARNING, "Invalid query string: " + sanctifyQueryString, ex); return new BibleChapter[0]; } }
Example 15
Source File: TestLatLonPointDistanceFeatureQuery.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testMissingValue() throws IOException { Directory dir = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig() .setMergePolicy(newLogMergePolicy(random().nextBoolean()))); Document doc = new Document(); LatLonPoint point = new LatLonPoint("foo", 0, 0); doc.add(point); LatLonDocValuesField docValue = new LatLonDocValuesField("foo", 0, 0); doc.add(docValue); point.setLocationValue(3, 3); docValue.setLocationValue(3, 3); w.addDocument(doc); w.addDocument(new Document()); point.setLocationValue(7, 7); docValue.setLocationValue(7, 7); w.addDocument(doc); DirectoryReader reader = w.getReader(); IndexSearcher searcher = newSearcher(reader); Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 10, 10, 5); TopScoreDocCollector collector = TopScoreDocCollector.create(3, null, 1); searcher.search(q, collector); TopDocs topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); double distance1 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(7)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(7)), 10,10); double distance2 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(3)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(3)), 10,10); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(2, (float) (3f * (5. / (5. + distance1)))), new ScoreDoc(0, (float) (3f * (5. / (5. + distance2)))) }, topHits.scoreDocs); CheckHits.checkExplanations(q, "", searcher); reader.close(); w.close(); dir.close(); }
Example 16
Source File: TestLongDistanceFeatureQuery.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testBasics() throws IOException { Directory dir = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig() .setMergePolicy(newLogMergePolicy(random().nextBoolean()))); Document doc = new Document(); LongPoint point = new LongPoint("foo", 0L); doc.add(point); NumericDocValuesField docValue = new NumericDocValuesField("foo", 0L); doc.add(docValue); point.setLongValue(3); docValue.setLongValue(3); w.addDocument(doc); point.setLongValue(12); docValue.setLongValue(12); w.addDocument(doc); point.setLongValue(8); docValue.setLongValue(8); w.addDocument(doc); point.setLongValue(-1); docValue.setLongValue(-1); w.addDocument(doc); point.setLongValue(7); docValue.setLongValue(7); w.addDocument(doc); DirectoryReader reader = w.getReader(); IndexSearcher searcher = newSearcher(reader); Query q = LongPoint.newDistanceFeatureQuery("foo", 3, 10, 5); TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); TopDocs topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(1, (float) (3f * (5. / (5. + 2.)))), new ScoreDoc(2, (float) (3f * (5. / (5. + 2.)))) }, topHits.scoreDocs); q = LongPoint.newDistanceFeatureQuery("foo", 3, 7, 5); collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); CheckHits.checkExplanations(q, "", searcher); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(4, (float) (3f * (5. / (5. + 0.)))), new ScoreDoc(2, (float) (3f * (5. / (5. + 1.)))) }, topHits.scoreDocs); reader.close(); w.close(); dir.close(); }
Example 17
Source File: TestLongDistanceFeatureQuery.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testOverUnderFlow() throws IOException { Directory dir = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig() .setMergePolicy(newLogMergePolicy(random().nextBoolean()))); Document doc = new Document(); LongPoint point = new LongPoint("foo", 0L); doc.add(point); NumericDocValuesField docValue = new NumericDocValuesField("foo", 0L); doc.add(docValue); point.setLongValue(3); docValue.setLongValue(3); w.addDocument(doc); point.setLongValue(12); docValue.setLongValue(12); w.addDocument(doc); point.setLongValue(-10); docValue.setLongValue(-10); w.addDocument(doc); point.setLongValue(Long.MAX_VALUE); docValue.setLongValue(Long.MAX_VALUE); w.addDocument(doc); point.setLongValue(Long.MIN_VALUE); docValue.setLongValue(Long.MIN_VALUE); w.addDocument(doc); DirectoryReader reader = w.getReader(); IndexSearcher searcher = newSearcher(reader); Query q = LongPoint.newDistanceFeatureQuery("foo", 3, Long.MAX_VALUE - 1, 100); TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); TopDocs topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(3, (float) (3f * (100. / (100. + 1.)))), new ScoreDoc(0, (float) (3f * (100. / (100. + Long.MAX_VALUE)))) // rounding makes the distance treated as if it was MAX_VALUE }, topHits.scoreDocs); q = LongPoint.newDistanceFeatureQuery("foo", 3, Long.MIN_VALUE + 1, 100); collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); CheckHits.checkExplanations(q, "", searcher); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(4, (float) (3f * (100. / (100. + 1.)))), new ScoreDoc(0, (float) (3f * (100. / (100. + Long.MAX_VALUE)))) // rounding makes the distance treated as if it was MAX_VALUE }, topHits.scoreDocs); reader.close(); w.close(); dir.close(); }
Example 18
Source File: TestLatLonPointDistanceFeatureQuery.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testCrossesDateLine() throws IOException { Directory dir = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig() .setMergePolicy(newLogMergePolicy(random().nextBoolean()))); Document doc = new Document(); LatLonPoint point = new LatLonPoint("foo", 0.0, 0.0); doc.add(point); LatLonDocValuesField docValue = new LatLonDocValuesField("foo",0.0, 0.0); doc.add(docValue); double pivotDistance = 5000;//5k point.setLocationValue(0, -179); docValue.setLocationValue(0, -179); w.addDocument(doc); point.setLocationValue(0, 176); docValue.setLocationValue(0, 176); w.addDocument(doc); point.setLocationValue(0, -150); docValue.setLocationValue(0, -150); w.addDocument(doc); point.setLocationValue(0, -140); docValue.setLocationValue(0, -140); w.addDocument(doc); point.setLocationValue(0, 140); docValue.setLocationValue(01, 140); w.addDocument(doc); DirectoryReader reader = w.getReader(); IndexSearcher searcher = newSearcher(reader); Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 0, 179, pivotDistance); TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); TopDocs topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); double distance1 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(0)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(-179)), 0,179); double distance2 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(0)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(176)), 0,179); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(0, (float) (3f * (pivotDistance / (pivotDistance + distance1)))), new ScoreDoc(1, (float) (3f * (pivotDistance / (pivotDistance + distance2)))) }, topHits.scoreDocs); reader.close(); w.close(); dir.close(); }
Example 19
Source File: TestLatLonPointDistanceFeatureQuery.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testBasics() throws IOException { Directory dir = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig() .setMergePolicy(newLogMergePolicy(random().nextBoolean()))); Document doc = new Document(); LatLonPoint point = new LatLonPoint("foo", 0.0, 0.0); doc.add(point); LatLonDocValuesField docValue = new LatLonDocValuesField("foo",0.0, 0.0); doc.add(docValue); double pivotDistance = 5000;//5k point.setLocationValue(-7, -7); docValue.setLocationValue(-7, -7); w.addDocument(doc); point.setLocationValue(9, 9); docValue.setLocationValue(9, 9); w.addDocument(doc); point.setLocationValue(8, 8); docValue.setLocationValue(8, 8); w.addDocument(doc); point.setLocationValue(4, 4); docValue.setLocationValue(4, 4); w.addDocument(doc); point.setLocationValue(-1, -1); docValue.setLocationValue(-1, -1); w.addDocument(doc); DirectoryReader reader = w.getReader(); IndexSearcher searcher = newSearcher(reader); Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 10, 10, pivotDistance); TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); TopDocs topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); double distance1 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(9)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(9)), 10,10); double distance2 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(8)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(8)), 10,10); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(1, (float) (3f * (pivotDistance / (pivotDistance + distance1)))), new ScoreDoc(2, (float) (3f * (pivotDistance / (pivotDistance + distance2)))) }, topHits.scoreDocs); distance1 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(9)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(9)), 9,9); distance2 = SloppyMath.haversinMeters(GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(8)) , GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(8)), 9,9); q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 9, 9, pivotDistance); collector = TopScoreDocCollector.create(2, null, 1); searcher.search(q, collector); topHits = collector.topDocs(); assertEquals(2, topHits.scoreDocs.length); CheckHits.checkExplanations(q, "", searcher); CheckHits.checkEqual(q, new ScoreDoc[] { new ScoreDoc(1, (float) (3f * (pivotDistance / (pivotDistance + distance1)))), new ScoreDoc(2, (float) (3f * (pivotDistance / (pivotDistance + distance2)))) }, topHits.scoreDocs); reader.close(); w.close(); dir.close(); }
Example 20
Source File: Lucene.java From StreamingRec with Apache License 2.0 | 4 votes |
@Override public LongArrayList recommendInternal(ClickData clickData) { //create a result list LongArrayList results = new LongArrayList(); try { //determine the input query, which can either be based on the current item //or all items from the current session depending on the configuration String input; if (!wholeSession){ //extract the content from the current item input = extractContent(clickData.click.item); }else{ //iteratively append the content of every item from the current user session input=""; for (int i = 0 ; i<clickData.session.size(); i++ ){ input += " "+ extractContent(clickData.session.get(i).item); } } //avoid an exception that happens for too large queries BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE); //create a query Query q = new QueryParser("text", analyzer) .parse(QueryParserUtil.escape(input)); //set an unreasonably high retrieval amount, because we want a long recommendation list int hitsPerPage = 100000; //instantiate the retrieval objects IndexReader reader = DirectoryReader.open(index); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage); //execute the query searcher.search(q, collector); //iterate the hits and extract the item ids ScoreDoc[] hits = collector.topDocs().scoreDocs; for (int i = 1; i < hits.length; ++i) { if (hits[i].score < minScore) { //stop retrieving, if the lucene score is too low break; } int docId = hits[i].doc; Document d = searcher.doc(docId); results.add(Long.parseLong(d.get("id"))); } reader.close(); } catch (ParseException | IOException e) { e.printStackTrace(); } //return the results return results; }