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;
            }
        }
示例#6
0
        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));
            }
        }