public void HitCountRequestedMoreThanResultCount() { var requestedHitCount = 100; var collector = new GroupTopDocsCollector(requestedHitCount, GroupFieldName); _searcher.Search(new MatchAllDocsQuery(), collector); var topDocs = collector.GroupTopDocs(); Assert.Greater(requestedHitCount, topDocs.TotalHits); }
public void GroupCountMatches() { var collector = new GroupTopDocsCollector(100, GroupFieldName); _searcher.Search(new FieldScoreQuery(ScoreFieldName, FieldScoreQuery.Type.INT), collector); var topDocs = collector.GroupTopDocs(); Assert.AreEqual(topDocs.GroupScoreDocs.Count(), 3); Assert.AreEqual(topDocs.GroupScoreDocs[0].GroupCount, 3, string.Format("Group {0}", topDocs.GroupScoreDocs[0].GroupFieldValue)); Assert.AreEqual(topDocs.GroupScoreDocs[1].GroupCount, 2, string.Format("Group {0}", topDocs.GroupScoreDocs[1].GroupFieldValue)); Assert.AreEqual(topDocs.GroupScoreDocs[2].GroupCount, 1, string.Format("Group {0}", topDocs.GroupScoreDocs[2].GroupFieldValue)); }
public void HitCountRequestedMatchResultCount() { var requestedHitCount = 2; var collector = new GroupTopDocsCollector(requestedHitCount, GroupFieldName); _searcher.Search(new MatchAllDocsQuery(), collector); var topDocs = collector.GroupTopDocs(); Assert.Greater(topDocs.TotalHits, requestedHitCount, "Test data should return more than requested hit count otherwise this test does not make sence."); Assert.AreEqual(requestedHitCount, topDocs.GroupScoreDocs.Count()); }
public void Tester() { var collector = new GroupTopDocsCollector(5, GroupFieldName); _searcher.Search(new FieldScoreQuery(ScoreFieldName, FieldScoreQuery.Type.INT), collector); var topDocs = collector.GroupTopDocs(); foreach (var group in topDocs.GroupScoreDocs) { Document doc = _searcher.Doc(group.Doc); Console.WriteLine("'{0}' \t Group '{1}' count: {2} (Max Score {3})", doc.Get(TextFieldName), group.GroupFieldValue, group.GroupCount, group.Score); } }
public void SortByScoreDesc() { var collector = new GroupTopDocsCollector(100, GroupFieldName); _searcher.Search(new FieldScoreQuery(ScoreFieldName, FieldScoreQuery.Type.INT), collector); var topDocs = collector.GroupTopDocs(); ScoreDoc previousResult = null; foreach (var result in topDocs.GroupScoreDocs) { if (previousResult != null) { Assert.GreaterOrEqual(previousResult.Score, result.Score); } previousResult = result; } }
public static void SearchSample() { Directory dir = new RAMDirectory(); Analyzer analyzer = new StandardAnalyzer(Version); var indexWriter = new IndexWriter(dir, analyzer, IndexWriter.MaxFieldLength.UNLIMITED); SpatialContext ctx = SpatialContext.GEO; var strategy = new PointVectorStrategy(ctx, SpartialFieldName); //var precision = 8; // Precision 8 means down to 19 meter - higher precision consumes more memory //SpatialPrefixTree grid = new GeohashPrefixTree(ctx, precision); //var strategy = new RecursivePrefixTreeStrategy(grid, spartialFieldName); var docs = CreateSearchDocuments(GetDeals(), strategy); foreach (var doc in docs) { indexWriter.AddDocument(doc); } indexWriter.Commit(); indexWriter.Dispose(); // "Current" position Point littleMermaid = ctx.MakePoint(12.599239, 55.692848); //var parser = new QueryParser(Version, "title", analyzer); //Query q = parser.Parse("deal"); Query q = new MatchAllDocsQuery(); // NOTE: MatchAllDocsQuery always returns score as 1.0 // Add distance from current point to the scoring q = new DistanceCustomScoreQuery(q, strategy, littleMermaid); //q = new RecursivePrefixTreeStrategyDistanceCustomScoreQuery(q, strategy, littleMermaid, spartialFieldName); // Remove everything more than 2000 km away var filter = strategy.MakeFilter(new SpatialArgs(SpatialOperation.Intersects, ctx.MakeCircle(littleMermaid, DistanceUtils.Dist2Degrees(2000, DistanceUtils.EARTH_MEAN_RADIUS_KM)))); // Ensures the most recent searcher is used without destroying the Lucene IndexReader cache (via NRT) var searcherManager = new SearcherManager(dir); var collector = new GroupTopDocsCollector(5, SupplierFieldName); var searcher = searcherManager.GetSearcher(); try { searcher.Search(q, filter, collector); } finally { searcherManager.ReleaseSearcher(searcher); } var hits = collector.GroupTopDocs(); Console.WriteLine("Found {0} document(s) that matched query '{1}':", hits.TotalHits, q); foreach (var match in hits.GroupScoreDocs) { Document doc = searcher.Doc(match.Doc); Console.WriteLine("Best match '{0}' in group '{1}' with count {2} (MaxDoc: Score {3} Location '{4}')", doc.Get(TitleFieldName), match.GroupFieldValue, match.GroupCount, match.Score, doc.Get(LocationNameFieldName)); } }