Exemplo n.º 1
0
        public int DocumentCount()
        {
            EnsureSearcher();
            var totalHitsCollector = new TotalHitCountCollector();

            Searcher?.Search(new MatchAllDocsQuery(), totalHitsCollector);
            return(totalHitsCollector.TotalHits);
        }
        private int CountDocsWithClass()
        {
            int docCount = MultiFields.GetTerms(_atomicReader, _classFieldName).DocCount;

            if (docCount == -1)
            { // in case codec doesn't support getDocCount
                TotalHitCountCollector totalHitCountCollector = new TotalHitCountCollector();
                BooleanQuery           q = new BooleanQuery();
                q.Add(new BooleanClause(new WildcardQuery(new Term(_classFieldName, WildcardQuery.WILDCARD_STRING.ToString())), Occur.MUST));
                if (_query != null)
                {
                    q.Add(_query, Occur.MUST);
                }
                _indexSearcher.Search(q, totalHitCountCollector);
                docCount = totalHitCountCollector.TotalHits;
            }
            return(docCount);
        }
Exemplo n.º 3
0
 public override long CountIndexedNodes(long nodeId, int[] propertyKeyIds, params Value[] propertyValues)
 {
     try
     {
         string[] propertyKeys = new string[propertyKeyIds.Length];
         for (int i = 0; i < propertyKeyIds.Length; i++)
         {
             propertyKeys[i] = _propertyKeyTokenHolder.getTokenById(propertyKeyIds[i]).name();
         }
         Query query = LuceneFulltextDocumentStructure.NewCountNodeEntriesQuery(nodeId, propertyKeys, propertyValues);
         TotalHitCountCollector collector = new TotalHitCountCollector();
         IndexSearcher.search(query, collector);
         return(collector.TotalHits);
     }
     catch (Exception e)
     {
         throw new Exception(e);
     }
 }
Exemplo n.º 4
0
        private IDictionary <string, int> GetMostFrequentTerms(IndexSearcher searcher, string field)
        {
            var res       = new Dictionary <string, int>();
            var fields    = MultiFields.GetFields(searcher.IndexReader);
            var terms     = fields.GetTerms(field);
            var termsEnum = terms.GetEnumerator(null);

            while (termsEnum.MoveNext() == true)
            {
                var collector = new TotalHitCountCollector();
                searcher.Search(new TermQuery(new Term(field, termsEnum.Term)), collector);

                if (collector.TotalHits > 0)
                {
                    res.Add(termsEnum.Term.Utf8ToString(), collector.TotalHits);
                }
            }

            return(res);
        }
        private int GetWordFreqForClass(string word, BytesRef c)
        {
            BooleanQuery booleanQuery = new BooleanQuery();
            BooleanQuery subQuery     = new BooleanQuery();

            foreach (string textFieldName in _textFieldNames)
            {
                subQuery.Add(new BooleanClause(new TermQuery(new Term(textFieldName, word)), Occur.SHOULD));
            }
            booleanQuery.Add(new BooleanClause(subQuery, Occur.MUST));
            booleanQuery.Add(new BooleanClause(new TermQuery(new Term(_classFieldName, c)), Occur.MUST));
            if (_query != null)
            {
                booleanQuery.Add(_query, Occur.MUST);
            }
            TotalHitCountCollector totalHitCountCollector = new TotalHitCountCollector();

            _indexSearcher.Search(booleanQuery, totalHitCountCollector);
            return(totalHitCountCollector.TotalHits);
        }
Exemplo n.º 6
0
        public override long CountIndexedNodes(long nodeId, int[] propertyKeyIds, params Value[] propertyValues)
        {
            Query nodeIdQuery = new TermQuery(LuceneDocumentStructure.newTermForChangeOrRemove(nodeId));
            Query valueQuery  = LuceneDocumentStructure.newSeekQuery(propertyValues);

            BooleanQuery.Builder nodeIdAndValueQuery = (new BooleanQuery.Builder()).setDisableCoord(true);
            nodeIdAndValueQuery.add(nodeIdQuery, BooleanClause.Occur.MUST);
            nodeIdAndValueQuery.add(valueQuery, BooleanClause.Occur.MUST);
            try
            {
                TotalHitCountCollector collector = new TotalHitCountCollector();
                IndexSearcher.search(nodeIdAndValueQuery.build(), collector);
                // A <label,propertyKeyId,nodeId> tuple should only match at most a single propertyValue
                return(collector.TotalHits);
            }
            catch (IOException e)
            {
                throw new Exception(e);
            }
        }
Exemplo n.º 7
0
        private IDictionary <string, int> GetMostFrequentTermsNumeric(IndexSearcher searcher, string field)
        {
            var res       = new Dictionary <string, int>();
            var fields    = MultiFields.GetFields(searcher.IndexReader);
            var terms     = fields.GetTerms(field);
            var termsEnum = terms.GetEnumerator(null);
            int term;

            while (termsEnum.MoveNext() == true)
            {
                var collector = new TotalHitCountCollector();
                searcher.Search(new TermQuery(new Term(field, termsEnum.Term)), collector);
                term = NumericUtils.PrefixCodedToInt32(termsEnum.Term);

                if (!res.ContainsKey(term.ToString()) &&
                    collector.TotalHits > 0 &&
                    term > 1921)
                {
                    res.Add(term.ToString(), collector.TotalHits);
                }
            }

            return(res);
        }
Exemplo n.º 8
0
        public Task <LuceneTopDocs> SearchAsync(LuceneQueryContext context, JObject queryObj)
        {
            var queryProp = queryObj["query"] as JObject;

            if (queryProp == null)
            {
                throw new ArgumentException("Query DSL requires a [query] property");
            }

            var query = CreateQueryFragment(context, queryProp);

            var sortProperty = queryObj["sort"];
            var fromProperty = queryObj["from"];
            var sizeProperty = queryObj["size"];

            var size = sizeProperty?.Value <int>() ?? 50;
            var from = fromProperty?.Value <int>() ?? 0;

            string sortField  = null;
            string sortOrder  = null;
            string sortType   = null;
            var    sortFields = new List <SortField>();

            if (sortProperty != null)
            {
                if (sortProperty.Type == JTokenType.String)
                {
                    sortField = sortProperty.ToString();
                    sortFields.Add(new SortField(sortField, SortFieldType.STRING, sortOrder == "desc"));
                }
                else if (sortProperty.Type == JTokenType.Object)
                {
                    sortField = ((JProperty)sortProperty.First).Name;
                    sortOrder = ((JProperty)sortProperty.First).Value["order"].ToString();
                    sortType  = ((JProperty)sortProperty.First).Value["type"]?.ToString();
                    var sortFieldType = SortFieldType.STRING;
                    if (sortType != null)
                    {
                        sortFieldType = (SortFieldType)Enum.Parse(typeof(SortFieldType), sortType.ToUpper());
                    }

                    sortFields.Add(new SortField(sortField, sortFieldType, sortOrder == "desc"));
                }
                else if (sortProperty.Type == JTokenType.Array)
                {
                    foreach (var item in sortProperty.Children())
                    {
                        sortField = ((JProperty)item.First).Name;
                        sortOrder = ((JProperty)item.First).Value["order"].ToString();
                        sortType  = ((JProperty)item.First).Value["type"]?.ToString();
                        var sortFieldType = SortFieldType.STRING;
                        if (sortType != null)
                        {
                            sortFieldType = (SortFieldType)Enum.Parse(typeof(SortFieldType), sortType.ToUpper());
                        }

                        sortFields.Add(new SortField(sortField, sortFieldType, sortOrder == "desc"));
                    }
                }
            }

            TopDocs docs = context.IndexSearcher.Search(
                query,
                size + from,
                sortField == null ? Sort.RELEVANCE : new Sort(sortFields.ToArray())
                );

            if (from > 0)
            {
                docs = new TopDocs(docs.TotalHits - from, docs.ScoreDocs.Skip(from).ToArray(), docs.MaxScore);
            }

            var collector = new TotalHitCountCollector();

            context.IndexSearcher.Search(query, collector);

            var result = new LuceneTopDocs {
                TopDocs = docs, Count = collector.TotalHits
            };

            return(Task.FromResult(result));
        }