Пример #1
0
        /// <summary>
        /// Gets detailed indexing information about all fields in the repository.
        /// </summary>
        /// <param name="includeNonIndexedFields">Whether to include non-indexed fields.</param>
        /// <returns>Detailed indexing information about all fields in the repository.</returns>
        public static IEnumerable <ExplicitPerFieldIndexingInfo> GetExplicitPerFieldIndexingInfo(bool includeNonIndexedFields)
        {
            var infoArray = new List <ExplicitPerFieldIndexingInfo>(ContentTypeManager.Instance.ContentTypes.Count * 5);

            foreach (var contentType in ContentTypeManager.Instance.ContentTypes.Values)
            {
                var xml        = new System.Xml.XmlDocument();
                var nsmgr      = new System.Xml.XmlNamespaceManager(xml.NameTable);
                var fieldCount = 0;

                nsmgr.AddNamespace("x", ContentType.ContentDefinitionXmlNamespace);
                xml.Load(contentType.Binary.GetStream());
                var fieldNodes = xml.SelectNodes("/x:ContentType/x:Fields/x:Field", nsmgr);
                if (fieldNodes != null)
                {
                    foreach (System.Xml.XmlElement fieldElement in fieldNodes)
                    {
                        var typeAttr = fieldElement.Attributes["type"] ?? fieldElement.Attributes["handler"];

                        var info = new ExplicitPerFieldIndexingInfo
                        {
                            ContentTypeName = contentType.Name,
                            ContentTypePath =
                                contentType.Path.Replace(Repository.ContentTypesFolderPath + "/", String.Empty),
                            FieldName = fieldElement.Attributes["name"].Value,
                            FieldType = typeAttr.Value
                        };

                        var fieldTitleElement = fieldElement.SelectSingleNode("x:DisplayName", nsmgr);
                        if (fieldTitleElement != null)
                        {
                            info.FieldTitle = fieldTitleElement.InnerText;
                        }

                        var fieldDescElement = fieldElement.SelectSingleNode("x:Description", nsmgr);
                        if (fieldDescElement != null)
                        {
                            info.FieldDescription = fieldDescElement.InnerText;
                        }

                        var hasIndexing   = false;
                        var indexingNodes = fieldElement.SelectNodes("x:Indexing/*", nsmgr);
                        if (indexingNodes != null)
                        {
                            foreach (System.Xml.XmlElement element in indexingNodes)
                            {
                                if (!Enum.TryParse(element.InnerText, out IndexFieldAnalyzer analyzer))
                                {
                                    analyzer = IndexFieldAnalyzer.Default;
                                }
                                hasIndexing = true;
                                switch (element.LocalName)
                                {
                                case "Analyzer":
                                    info.Analyzer = analyzer;
                                    break;

                                case "IndexHandler":
                                    info.IndexHandler = element.InnerText.Replace("SenseNet.Search", ".");
                                    break;

                                case "Mode":
                                    info.IndexingMode = element.InnerText;
                                    break;

                                case "Store":
                                    info.IndexStoringMode = element.InnerText;
                                    break;

                                case "TermVector":
                                    info.TermVectorStoringMode = element.InnerText;
                                    break;
                                }
                            }
                        }

                        fieldCount++;

                        if (hasIndexing || includeNonIndexedFields)
                        {
                            infoArray.Add(info);
                        }
                    }
                }

                // content type without fields
                if (fieldCount == 0 && includeNonIndexedFields)
                {
                    var info = new ExplicitPerFieldIndexingInfo
                    {
                        ContentTypeName = contentType.Name,
                        ContentTypePath = contentType.Path.Replace(Repository.ContentTypesFolderPath + "/", String.Empty),
                    };

                    infoArray.Add(info);
                }
            }

            return(infoArray);
        }
Пример #2
0
		public static string GetExplicitIndexingInfo(bool fullTable)
		{
			var infoArray = new List<ExplicitPerFieldIndexingInfo>(Current.ContentTypes.Count * 5);
			foreach (var contentType in Current.ContentTypes.Values)
			{
				var xml = new System.Xml.XmlDocument();
				var nsmgr = new System.Xml.XmlNamespaceManager(xml.NameTable);
				var fieldCount = 0;

				nsmgr.AddNamespace("x", ContentType.ContentDefinitionXmlNamespace);
				xml.Load(contentType.Binary.GetStream());
				foreach (System.Xml.XmlElement fieldElement in xml.SelectNodes("/x:ContentType/x:Fields/x:Field", nsmgr))
				{
					var typeAttr = fieldElement.Attributes["type"];
					if (typeAttr == null)
						typeAttr = fieldElement.Attributes["handler"];

					var info = new ExplicitPerFieldIndexingInfo
					{
						ContentTypeName = contentType.Name,
						ContentTypePath = contentType.Path.Replace(Repository.ContentTypesFolderPath + "/", String.Empty),
						FieldName = fieldElement.Attributes["name"].Value,
						FieldType = typeAttr.Value
					};

					var fieldTitleElement = fieldElement.SelectSingleNode("x:DisplayName", nsmgr);
					if (fieldTitleElement != null)
						info.FieldTitle = fieldTitleElement.InnerText;

					var fieldDescElement = fieldElement.SelectSingleNode("x:Description", nsmgr);
					if (fieldDescElement != null)
						info.FieldDescription = fieldDescElement.InnerText;

					var hasIndexing = false;
					foreach (System.Xml.XmlElement element in fieldElement.SelectNodes("x:Indexing/*", nsmgr))
					{
						hasIndexing = true;
						switch (element.LocalName)
						{
							case "Analyzer": info.Analyzer = element.InnerText.Replace("Lucene.Net.Analysis", "."); break;
							case "IndexHandler": info.IndexHandler = element.InnerText.Replace("SenseNet.Search", "."); break;
							case "Mode": info.IndexingMode = element.InnerText; break;
							case "Store": info.IndexStoringMode = element.InnerText; break;
							case "TermVector": info.TermVectorStoringMode = element.InnerText; break;
						}
					}

					fieldCount++;

					if(hasIndexing || fullTable)
						infoArray.Add(info);
				}

				//hack: content type without fields
				if (fieldCount == 0 && fullTable)
				{
					var info = new ExplicitPerFieldIndexingInfo
					{
						ContentTypeName = contentType.Name,
						ContentTypePath = contentType.Path.Replace(Repository.ContentTypesFolderPath + "/", String.Empty),
					};

					infoArray.Add(info);
				}
			}

			var sb = new StringBuilder();
			sb.AppendLine("TypePath\tType\tField\tFieldTitle\tFieldDescription\tFieldType\tMode\tStore\tTVect\tHandler\tAnalyzer");
			foreach (var info in infoArray)
			{
				sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}",
					info.ContentTypePath,
					info.ContentTypeName,
					info.FieldName,
					info.FieldTitle,
					info.FieldDescription,
					info.FieldType,
					info.IndexingMode,
					info.IndexStoringMode,
					info.TermVectorStoringMode,
					info.IndexHandler,
					info.Analyzer);
				sb.AppendLine();
			}
			return sb.ToString();
		}
Пример #3
0
        public static string GetExplicitIndexingInfo(bool fullTable)
        {
            var infoArray = new List <ExplicitPerFieldIndexingInfo>(Current.ContentTypes.Count * 5);

            foreach (var contentType in Current.ContentTypes.Values)
            {
                var xml        = new System.Xml.XmlDocument();
                var nsmgr      = new System.Xml.XmlNamespaceManager(xml.NameTable);
                var fieldCount = 0;

                nsmgr.AddNamespace("x", ContentType.ContentDefinitionXmlNamespace);
                xml.Load(contentType.Binary.GetStream());
                foreach (System.Xml.XmlElement fieldElement in xml.SelectNodes("/x:ContentType/x:Fields/x:Field", nsmgr))
                {
                    var typeAttr = fieldElement.Attributes["type"];
                    if (typeAttr == null)
                    {
                        typeAttr = fieldElement.Attributes["handler"];
                    }

                    var info = new ExplicitPerFieldIndexingInfo
                    {
                        ContentTypeName = contentType.Name,
                        ContentTypePath = contentType.Path.Replace(Repository.ContentTypesFolderPath + "/", String.Empty),
                        FieldName       = fieldElement.Attributes["name"].Value,
                        FieldType       = typeAttr.Value
                    };

                    var fieldTitleElement = fieldElement.SelectSingleNode("x:DisplayName", nsmgr);
                    if (fieldTitleElement != null)
                    {
                        info.FieldTitle = fieldTitleElement.InnerText;
                    }

                    var fieldDescElement = fieldElement.SelectSingleNode("x:Description", nsmgr);
                    if (fieldDescElement != null)
                    {
                        info.FieldDescription = fieldDescElement.InnerText;
                    }

                    var hasIndexing = false;
                    foreach (System.Xml.XmlElement element in fieldElement.SelectNodes("x:Indexing/*", nsmgr))
                    {
                        hasIndexing = true;
                        switch (element.LocalName)
                        {
                        case "Analyzer": info.Analyzer = element.InnerText.Replace("Lucene.Net.Analysis", "."); break;

                        case "IndexHandler": info.IndexHandler = element.InnerText.Replace("SenseNet.Search", "."); break;

                        case "Mode": info.IndexingMode = element.InnerText; break;

                        case "Store": info.IndexStoringMode = element.InnerText; break;

                        case "TermVector": info.TermVectorStoringMode = element.InnerText; break;
                        }
                    }

                    fieldCount++;

                    if (hasIndexing || fullTable)
                    {
                        infoArray.Add(info);
                    }
                }

                //hack: content type without fields
                if (fieldCount == 0 && fullTable)
                {
                    var info = new ExplicitPerFieldIndexingInfo
                    {
                        ContentTypeName = contentType.Name,
                        ContentTypePath = contentType.Path.Replace(Repository.ContentTypesFolderPath + "/", String.Empty),
                    };

                    infoArray.Add(info);
                }
            }

            var sb = new StringBuilder();

            sb.AppendLine("TypePath\tType\tField\tFieldTitle\tFieldDescription\tFieldType\tMode\tStore\tTVect\tHandler\tAnalyzer");
            foreach (var info in infoArray)
            {
                sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}",
                                info.ContentTypePath,
                                info.ContentTypeName,
                                info.FieldName,
                                info.FieldTitle,
                                info.FieldDescription,
                                info.FieldType,
                                info.IndexingMode,
                                info.IndexStoringMode,
                                info.TermVectorStoringMode,
                                info.IndexHandler,
                                info.Analyzer);
                sb.AppendLine();
            }
            return(sb.ToString());
        }