public static SearchResultsWithHighlights <T> GetResultsWithHighlights <T>(this IQueryable <T> source, params string[] fieldNames) { Assert.ArgumentNotNull(source, "source"); var queryable = source as GenericQueryable <T, SolrCompositeQuery>; Assert.IsNotNull(queryable, queryable.GetType()); var expression = source.Expression; // Build a native query var intermidQuery = (SolrCompositeQuery)queryable.GetType().InvokeMember("GetQuery", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic, Type.DefaultBinder, queryable, new object[] { expression }); var linqIndex = (LinqToSolrIndexExtended <T>)queryable.GetType().InvokeMember("Index", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic, Type.DefaultBinder, queryable, null); Assert.IsNotNull(linqIndex, "Can't get an extended linqToSolrIndex..."); var translatedFieldNames = fieldNames.Select(field => linqIndex.Parameters.FieldNameTranslator.GetIndexFieldName(field)).ToArray(); GetResultsOptions options = GetResultsOptions.Default; var intermidQueryWithHighlighting = new SolrCompositeQueryWithHighlights(intermidQuery, options) { HighlightParameters = translatedFieldNames }; // Execute the resulting query return(linqIndex.Execute <SearchResultsWithHighlights <T> >(intermidQueryWithHighlighting)); }
public SolrCompositeQueryWithHighlights(SolrCompositeQuery query, GetResultsOptions options = GetResultsOptions.Default) : base(query.Query, query.Filter, query.Methods, query.VirtualFieldProcessors, query.FacetQueries, query.ExecutionContexts) { this.Methods.Insert(0, new GetResultsMethod(options)); }