Exemplo n.º 1
0
            private void CompleteFacetCalculationsStage1(IndexSearcherHolder.IndexSearcherHoldingState state, bool allVectoredTerms)
            {
                var fieldsToRead = new HashSet <string>(Facets
                                                        .Where(x => x.Value.Aggregation != FacetAggregation.None && x.Value.Aggregation != FacetAggregation.Count)
                                                        .Select(x => x.Value.AggregationField)
                                                        .Where(x => x != null));

                if (fieldsToRead.Count == 0)
                {
                    return;
                }

                var allDocs = new HashSet <int>(matches.Values.SelectMany(x => x.Docs));

                if (allVectoredTerms)
                {
                    IndexedTerms.ReadEntriesForFieldsFromTermVectors(state, fieldsToRead, allDocs, GetValueFromIndex,
                                                                     (field, textVal, currentVal, docId) =>
                                                                     HandleFacetsCalculationStage1(docId, field, textVal, currentVal));
                }
                else
                {
                    IndexedTerms.ReadEntriesForFields(state, fieldsToRead, allDocs, GetValueFromIndex,
                                                      (field, textVal, currentVal, docId) =>
                                                      HandleFacetsCalculationStage1(docId, field, textVal, currentVal));
                }
            }
Exemplo n.º 2
0
            public void Execute()
            {
                //We only want to run the base query once, so we capture all of the facet-ing terms then run the query
                //	once through the collector and pull out all of the terms in one shot
                var allCollector = new GatherAllCollector();
                var facetsByName = new Dictionary <string, Dictionary <string, FacetValue> >();


                using (var currentState = Database.IndexStorage.GetCurrentStateHolder(Index))
                {
                    var currentIndexSearcher = currentState.IndexSearcher;

                    var baseQuery = Database.IndexStorage.GetLuceneQuery(Index, IndexQuery, Database.IndexQueryTriggers);
                    currentIndexSearcher.Search(baseQuery, allCollector);
                    var fields = Facets.Values.Select(x => x.Name)
                                 .Concat(Ranges.Select(x => x.Key));
                    var fieldsToRead = new HashSet <string>(fields);

                    FieldTermVector fieldTermVector;
                    var             allVectoredTerms =
                        fieldsToRead.All(s => indexDefinition.TermVectors.TryGetValue(s, out fieldTermVector) && fieldTermVector != FieldTermVector.No);

                    if (allVectoredTerms)
                    {
                        IndexedTerms.ReadEntriesForFieldsFromTermVectors(currentState,
                                                                         fieldsToRead,
                                                                         allCollector.Documents,
                                                                         (field, value, doc) => HandleFacets(field, value, facetsByName, doc));
                    }
                    else
                    {
                        IndexedTerms.ReadEntriesForFields(currentState,
                                                          fieldsToRead,
                                                          allCollector.Documents,
                                                          (field, value, doc) => HandleFacets(field, value, facetsByName, doc));
                    }
                    UpdateFacetResults(facetsByName);

                    CompleteFacetCalculationsStage1(currentState, allVectoredTerms);
                    CompleteFacetCalculationsStage2();
                }
            }