예제 #1
0
        public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery,
                                              IDictionary <string, IFilter> enabledFilters)
        {
            System.Type type = GetCriteriaClass(criteria);
            ISearchFactoryImplementor searchFactory = ContextHelper.GetSearchFactory(GetSession(criteria));

            Iesi.Collections.Generic.ISet <System.Type> types;
            IndexSearcher searcher = FullTextSearchHelper.BuildSearcher(searchFactory, out types, type);

            if (searcher == null)
            {
                throw new SearchException("Could not find a searcher for class: " + type.FullName);
            }
            Lucene.Net.Search.Query query = FullTextSearchHelper.FilterQueryByClasses(types, luceneQuery);
            Hits          hits            = searcher.Search(query);
            List <object> ids             = new List <object>();

            for (int i = 0; i < hits.Length(); i++)
            {
                object id = DocumentBuilder.GetDocumentId(searchFactory, type, hits.Doc(i));
                ids.Add(id);
            }
            base.Values = ids.ToArray();
            return(base.ToSqlString(criteria, criteriaQuery, enabledFilters));
        }
        public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
        {
            var type          = GetCriteriaClass(criteria);
            var searchFactory = ContextHelper.GetSearchFactory(GetSession(criteria));
            var searcher      = FullTextSearchHelper.BuildSearcher(searchFactory, out var types, type);

            if (searcher == null)
            {
                throw new SearchException("Could not find a searcher for class: " + type.FullName);
            }
            var query   = FullTextSearchHelper.FilterQueryByClasses(types, luceneQuery);
            var results = searcher.Search(query, Int32.MaxValue);

            Values = results.ScoreDocs.Select(result => searcher.Doc(result.Doc))
                     .Select(doc => DocumentBuilder.GetDocumentId(searchFactory, type, doc)).ToArray();
            return(base.ToSqlString(criteria, criteriaQuery));
        }
예제 #3
0
        public static IEnumerable <object> GetIds(SearchFactoryImpl sf, Type type, Query query)
        {
            Iesi.Collections.Generic.ISet <Type> types;
            var searcher = FullTextSearchHelper.BuildSearcher(sf, out types, type);

            if (searcher == null)
            {
                throw new SearchException("Could not find a searcher for class: " + type.FullName);
            }

            try {
                var q = FullTextSearchHelper.FilterQueryByClasses(types, query);
                return(GetIds(sf, searcher, type, q));
            }
            finally {
                searcher.Close();
            }
        }