private void ExportIndexSchema(string str) { //Load xml XDocument xdoc = XDocument.Load(path + @"\sitecore modules\Shell\Sitecore\ItemBuckets\Services\schema_template.xml"); var index = SearchManager.GetIndex(str); if (index != null) { using (var context = new SortableIndexSearchContext(index)) { //Run query foreach (var field in context.Searcher.GetIndexReader().GetFieldNames(IndexReader.FieldOption.ALL)) { xdoc.Element("schema").Element("fields").Add(new XElement("field", new XAttribute("name", field), new XAttribute("type", "string"), new XAttribute("indexed", "true"), new XAttribute("stored", "true"))); } } } var WriteFileStream = new XmlTextWriter(path + @"\sitecore modules\Shell\Sitecore\ItemBuckets\Services\schema.xml", Encoding.UTF8); xdoc.Save(WriteFileStream); WriteFileStream.Close(); }
public static List <List <FacetReturn> > GetFacets(List <SearchStringModel> _searchQuery) { var ret = new List <List <FacetReturn> >(); var facets = Context.ContentDatabase.GetItem(Constants.FacetFolder).Children; foreach (Item facet in facets) { if (facet.Fields["Enabled"].Value == "1") { dynamic type = Activator.CreateInstance(Type.GetType(facet.Fields["Type"].Value)); if ((type as IFacet).IsNotNull()) { var locationOverride = GetLocationOverride(_searchQuery); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex(BucketManager.GetContextIndex(Context.ContentDatabase.GetItem(locationOverride))))) { var query = SearchHelper.GetBaseQuery(_searchQuery, locationOverride); var queryBase = IndexSearcher.ContructQuery(query); var searchBitArray = new QueryFilter(queryBase).Bits(context.Searcher.GetIndexReader()); var res = ((IFacet)type).Filter(queryBase, _searchQuery, locationOverride, searchBitArray); ret.Add(res); } } } } return(ret); }
/// <summary> /// Performs a search in the WeBlog search index, with a sort /// </summary> /// <typeparam name="T">The type of the items to be returned from the search</typeparam> /// <param name="query">The query to execute</param> /// <param name="maximumResults">The maximum number of results</param> /// <param name="sortField">The index field to sort on</param> /// <returns>An array of search results, or an empty array if there was an issue</returns> public T[] Execute <T>(QueryBase query, int maximumResults, Action <List <T>, Item> func, string sortField, bool reverseSort) { if (query is CombinedQuery) { // Add on database (query as CombinedQuery).Add(new FieldQuery(Sitecore.Search.BuiltinFields.Database, Sitecore.Context.Database.Name), QueryOccurance.Must); // Add language var langCode = DatabaseCrawler.TransformLanguageCode(Sitecore.Context.Language.Name); (query as CombinedQuery).Add(new FieldQuery(Constants.Index.Fields.Language, langCode), QueryOccurance.Must); } // I have to use Action<T> cause the compiler can't work out how to use implicit operators when T is one of the items classes (generated by CIG) var items = new List <T>(); if (maximumResults > 0) { var index = GetSearchIndex(); if (index != null && index.GetDocumentCount() > 0) { using (var searchContext = new SortableIndexSearchContext(index)) { SearchHits hits; if (!string.IsNullOrEmpty(sortField)) { #if FEATURE_CONTENT_SEARCH var sort = new Lucene.Net.Search.Sort(new SortField(sortField, SortField.STRING, reverseSort)); #else var sort = new Lucene.Net.Search.Sort(sortField, reverseSort); #endif hits = searchContext.Search(query, sort); } else { hits = searchContext.Search(query); } if (hits != null) { foreach (var result in hits.FetchResults(0, maximumResults)) { var item = SearchManager.GetObject(result); if (item != null) { func(items, (Item)item); } } } } } else { Log.Warn("WeBlog index was not found or didn't contain any documents", this); } } return(items.ToArray()); }
public virtual KeyValuePair <int, List <SitecoreItem> > RunQuery(Query query, int pageSize, int pageNumber, string sortField, string sortDirection) { var items = new List <SitecoreItem>(); int hitCount; if (Config.EnableBucketDebug || Constants.EnableTemporaryBucketDebug) { Log.Info("Bucket Debug Query: " + query, this); } if (Config.SOLREnabled == "true") { GetValue(query, items); return(new KeyValuePair <int, List <SitecoreItem> >(items.Count, items)); } else { if (Index is Index) { (Index as Index).Analyzer = new StandardAnalyzer(Consts.StopWords); } using (var context = new SortableIndexSearchContext(Index)) { BooleanQuery.SetMaxClauseCount(Config.LuceneMaxClauseCount); var sortingDir = sortDirection == "asc" ? false : true; var searchHits = string.IsNullOrWhiteSpace(sortField) ? context.Search(query) : context.Search(query, new Sort(sortField, sortingDir)); if (searchHits.IsNull()) { return(new KeyValuePair <int, List <SitecoreItem> >()); } hitCount = searchHits.Length; if (pageSize == 0) { pageSize = searchHits.Length; } if (pageNumber == 1) { pageNumber = 1; } var resultCollection = new SearchResultCollection(); resultCollection = searchHits.FetchResults((pageNumber - 1) * pageSize, pageSize); SearchHelper.GetItemsFromSearchResult(resultCollection, items); } return(new KeyValuePair <int, List <SitecoreItem> >(hitCount, items)); } }
private static IEnumerable <string> GetAllIndexFields() { var terms = new List <string>(); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex(Constants.Index.Name))) { var fieldsInIndex = context.Searcher.GetIndexReader().GetFieldNames(IndexReader.FieldOption.ALL).OfType <string>(); terms.AddRange(fieldsInIndex); } return(terms); }
private static List<string> SuggestSimilar(string term) { var similarWordsList = new List<string>(); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex(Constants.Index.Name))) { // create the spell checker /*var spell = new SpellChecker.Net.Search.Spell.SpellChecker(context.Searcher.GetIndexReader().Directory()); // get 2 similar words string[] similarWords = spell.SuggestSimilar(term, 2); // show the similar words for (int wordIndex = 0; wordIndex < similarWords.Length; wordIndex++) { similarWordsList.Add(similarWords[wordIndex]); }*/ } return similarWordsList; }
private static List <string> SuggestSimilar(string term) { var similarWordsList = new List <string>(); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex(Constants.Index.Name))) { // create the spell checker /*var spell = new SpellChecker.Net.Search.Spell.SpellChecker(context.Searcher.GetIndexReader().Directory()); * * // get 2 similar words * string[] similarWords = spell.SuggestSimilar(term, 2); * * // show the similar words * for (int wordIndex = 0; wordIndex < similarWords.Length; wordIndex++) * { * similarWordsList.Add(similarWords[wordIndex]); * }*/ } return(similarWordsList); }
private static IEnumerable <string> GetAuthorsFromIndex() { var terms = new List <string>(); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex(Constants.Index.Name))) { var termsByField = context.Searcher.GetIndexReader().Terms(new Term("__created by", string.Empty)); while (termsByField.Next()) { if (termsByField.Term().Field() == "__created by") { terms.Add(termsByField.Term().Text()); } else { break; } } } return(terms); }
private static IEnumerable <string> GetExtensionsFromIndex() { var terms = new List <string>(); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex("itembuckets_medialibrary"))) { var termsByField = context.Searcher.GetIndexReader().Terms(new Term("extension", string.Empty)); while (termsByField.Next()) { if (termsByField.Term().Field() == "extension") { terms.Add(termsByField.Term().Text()); } else { break; } } } return(terms); }
private List <List <FacetReturn> > GetFacets() { var ret = new List <List <FacetReturn> >(); var facets = Context.ContentDatabase.GetItem(Constants.FacetFolder).Children; foreach (Item facet in facets) { if (facet.Fields["Enabled"].Value == "1") { // pull the type off of the Sitecore item string typeName = facet.Fields["Type"].Value; object type = Sitecore.Reflection.ReflectionUtil.CreateObject(typeName); // pull any parameters out of the Sitecore item string typeParameters = facet.Fields["Parameters"].Value; if (!string.IsNullOrEmpty(typeParameters)) { Sitecore.Reflection.ReflectionUtil.SetProperties(type, typeParameters); } if ((type as IFacet).IsNotNull()) { var locationOverride = GetLocationOverride(); using (var context = new SortableIndexSearchContext(SearchManager.GetIndex(BucketManager.GetContextIndex(Context.ContentDatabase.GetItem(locationOverride))))) { var query = SearchHelper.GetBaseQuery(this._searchQuery, locationOverride); var queryBase = IndexSearcher.ContructQuery(query); var searchBitArray = new QueryFilter(queryBase).Bits(context.Searcher.GetIndexReader()); var res = ((IFacet)type).Filter(queryBase, this._searchQuery, locationOverride, searchBitArray); ret.Add(res); } } } } return(ret); }
public virtual Dictionary <string, int> RunFacet(Query query, bool showAllVersions, bool isFacet, bool isIdLookup, int pageSize, int pageNumber, string termName, List <string> termValue, BitArray queryBase, string locationFilter) { var runningCOunt = new Dictionary <string, int>(); var db = Context.ContentDatabase ?? Sitecore.Context.Database; var indexName = BucketManager.GetContextIndex(db.GetItem(locationFilter)); if (indexName.EndsWith("_remote")) { Index = RemoteSearchManager.GetIndex(indexName) as RemoteIndex; } else if (indexName.EndsWith("_inmemory")) { Index = InMemorySearchManager.GetIndex(indexName) as InMemoryIndex; } else { Index = SearchManager.GetIndex(indexName) as Index; } using (var context = new SortableIndexSearchContext(Index)) { if (Config.EnableBucketDebug || Constants.EnableTemporaryBucketDebug) { Log.Info("Using: " + indexName, this); Log.Info("Bucket Facet Original Debug Query: " + query, this); } foreach (var terms in termValue) { var genreQueryFilter = GenreQueryFilter(query, isFacet, isIdLookup, termName, terms); var tempSearchArray = queryBase.Clone() as BitArray; if (Config.EnableBucketDebug || Constants.EnableTemporaryBucketDebug) { Log.Info("Bucket Facet Debug Query: " + genreQueryFilter, this); } BitArray genreBitArray = genreQueryFilter.Bits(context.Searcher.GetIndexReader()); if (tempSearchArray.Length == genreBitArray.Length) { BitArray combinedResults = tempSearchArray.And(genreBitArray); var cardinality = SearchHelper.GetCardinality(combinedResults); if (cardinality > 0) { if (!isFacet) { if (!runningCOunt.ContainsKey(terms)) { runningCOunt.Add(terms, cardinality); } } else { if (!runningCOunt.ContainsKey(terms)) { runningCOunt.Add(terms, cardinality); } } } } } } return(runningCOunt); }