Created
August 17, 2024 19:38
-
-
Save hishaamn/91c62a4b50d02434cbe46d47c8f3af37 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Xml.Linq; | |
using Sitecore.ContentSearch.SolrProvider.Pipelines.PopulateSolrSchema; | |
using SolrNet.Schema; | |
public class ExtSchemaPopulateHelper : SchemaPopulateHelper | |
{ | |
private readonly SolrSchema schema; | |
public ExtSchemaPopulateHelper(SolrSchema solrSchema) : base(solrSchema) => this.schema = solrSchema; | |
public override IEnumerable<XElement> GetAllFieldTypes() => this.GetReplaceFields().Union(this.GetAddFieldTypes()).Where(o => o != null); | |
private IEnumerable<XElement> GetAddFieldTypes() | |
{ | |
var schemaPopulateHelper = this; | |
yield return schemaPopulateHelper.CreateFieldType("random", "solr.RandomSortField", new Dictionary<string, string>() | |
{ | |
{ | |
"indexed", | |
"true" | |
} | |
}); | |
yield return schemaPopulateHelper.CreateFieldType("ignored", "solr.StrField", new Dictionary<string, string>() | |
{ | |
{ | |
"indexed", | |
"false" | |
}, | |
{ | |
"stored", | |
"false" | |
}, | |
{ | |
"docValues", | |
"false" | |
}, | |
{ | |
"multiValued", | |
"true" | |
} | |
}); | |
} | |
private XElement CreateFieldType(string name, string @class, IDictionary<string, string> properties) | |
{ | |
var xelement = new XElement(this.TypeExists(name) ? "replace-field-type" : "add-field-type"); | |
xelement.Add(new XElement(nameof(name), name)); | |
xelement.Add(new XElement(nameof(@class), @class)); | |
foreach (var property in properties) | |
{ | |
xelement.Add(new XElement(property.Key, property.Value)); | |
} | |
return xelement; | |
} | |
private XElement GetReplaceTextGeneralFieldType() | |
{ | |
SolrFieldType solrFieldType = this.schema.SolrFieldTypes.Find((Predicate<SolrFieldType>)(f => f.Name == "text_general")); | |
if (solrFieldType == null) | |
{ | |
return (XElement)null; | |
} | |
XElement generalFieldType = new XElement((XName)"replace-field-type"); | |
generalFieldType.Add(new XElement((XName)"name", solrFieldType.Name)); | |
generalFieldType.Add(new XElement((XName)"class", solrFieldType.Type)); | |
generalFieldType.Add(new XElement((XName)"positionIncrementGap", "100")); | |
generalFieldType.Add(new XElement((XName)"multiValued", "false")); | |
XElement content1 = new XElement((XName)"indexAnalyzer"); | |
content1.Add(new XElement((XName)"tokenizer", new XElement((XName)"class", "solr.StandardTokenizerFactory"))); | |
content1.Add(new XElement((XName)"filters", new object[3] | |
{ | |
new XElement((XName) "class", "solr.StopFilterFactory"), | |
new XElement((XName) "ignoreCase", "true"), | |
new XElement((XName) "words", "stopwords.txt") | |
})); | |
content1.Add(new XElement((XName)"filters", new XElement((XName)"class", "solr.LowerCaseFilterFactory"))); | |
content1.Add(new XElement((XName)"filters", new object[2] | |
{ | |
new XElement((XName) "class", "solr.ASCIIFoldingFilterFactory"), | |
new XElement((XName) "preserveOriginal", "true"), | |
})); | |
content1.Add(new XElement((XName)"charFilters", new object[2] | |
{ | |
new XElement((XName) "class", "solr.MappingCharFilterFactory"), | |
new XElement((XName) "mapping", "mapping-FoldToASCII.txt"), | |
})); | |
content1.Add(new XElement((XName)"charFilters", new object[2] | |
{ | |
new XElement((XName) "class", "solr.MappingCharFilterFactory"), | |
new XElement((XName) "mapping", "mapping-FoldToASCII.txt"), | |
})); | |
generalFieldType.Add(content1); | |
XElement content2 = new XElement((XName)"queryAnalyzer"); | |
content2.Add(new XElement((XName)"tokenizer", new XElement((XName)"class", "solr.StandardTokenizerFactory"))); | |
content2.Add(new XElement((XName)"filters", new object[3] | |
{ | |
new XElement((XName) "class", "solr.StopFilterFactory"), | |
new XElement((XName) "ignoreCase", "true"), | |
new XElement((XName) "words", "stopwords.txt") | |
})); | |
content2.Add(new XElement((XName)"filters", new object[4] | |
{ | |
new XElement((XName) "class", "solr.SynonymFilterFactory"), | |
new XElement((XName) "synonyms", "synonyms.txt"), | |
new XElement((XName) "ignoreCase", "true"), | |
new XElement((XName) "expand", "true") | |
})); | |
content2.Add(new XElement((XName)"filters", new XElement((XName)"class", "solr.LowerCaseFilterFactory"))); | |
generalFieldType.Add(content2); | |
return generalFieldType; | |
} | |
private IEnumerable<XElement> GetReplaceFields() | |
{ | |
yield return this.GetReplaceTextGeneralFieldType(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment