Lucene sitecore搜索同义词文件位置

Lucene sitecore搜索同义词文件位置,lucene,sitecore,sitecore7,Lucene,Sitecore,Sitecore7,我已经将我的DefaultIndexConfiguration配置文件更改为基于同义词()进行搜索,效果很好。但是,这是基于文件系统中的xml文件 C:\inetpub\wwwroot\website\Data\synonyms.xml 我想做的是在CMS中管理这些数据。 有人知道如何设置这个xmlSynonymFilePath参数来实现我想要的吗?还是我遗漏了什么?最简单的解决方案是在Sitecore(例如,/Sitecore/system/synonyms)中使用只有一个多行字段的模板创

我已经将我的DefaultIndexConfiguration配置文件更改为基于同义词()进行搜索,效果很好。但是,这是基于文件系统中的xml文件


C:\inetpub\wwwroot\website\Data\synonyms.xml
我想做的是在CMS中管理这些数据。
有人知道如何设置这个xmlSynonymFilePath参数来实现我想要的吗?还是我遗漏了什么?

最简单的解决方案是在Sitecore(例如,
/Sitecore/system/synonyms
)中使用只有一个多行字段的模板创建一个项目,名为
synonyms
,并将xml保留在该字段中,而不是从文件中读取

然后像这样创建
ISynonymEngine
的自定义实现(这只是最简单的示例-它不是生产就绪代码):

公共类CustomSynonymEngine:Sitecore.ContentSearch.LucenProvider.Analyzers.ISynonymEngine
{
私有只读列表_同义词组=新列表();
公共定制引擎()
{
Database Database=Sitecore.Context.ContentDatabase??Sitecore.Context.Database??Database.GetDatabase(“web”);
Item Item=database.GetItem(“/sitecore/system/synonyms”);//或任何路径
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(项目[“同义词]);
XmlNodeList XmlNodeList=xmlDocument.SelectNodes(“/synonyms/group”);
if(xmlNodeList==null)
抛出新的InvalidOperationException(“文件中没有同义词组”);
foreach(xmlNodeList中的IEnumerable源)
_同义词组。添加(
新只读集合(
source.Cast().Select(synNode=>synNode.InnerText.Trim().ToLower()).ToList());
}
公共IEnumerable同义词(字符串字)
{
Assert.ArgumentNotNull(单词,“单词”);
foreach(组中的ReadOnlyCollection ReadOnlyCollection)
{
if(readOnlyCollection.Contains(word))
返回只读集合;
}
返回null;
}
}
并在Sitecore配置中注册引擎,而不是默认引擎:


这是生产就绪代码-在实例化
CustomSynonymsenEngine
类时,它只读取一次同义词列表(我不知道Sitecore是否多次保留实例或创建新实例)

您应该扩展此代码以缓存同义词,并在每次更改同义词列表时清除缓存


此外,您还应该考虑在Sitecore树中拥有一个好的同义词结构,而不是一个很难维护的一项和xml blob。

您希望在Sitecore中有一个可管理的同义词文件路径还是同义词列表?@MarekMusielak同义词列表。谢谢你,谢谢你。我正在接受你的建议,并取得了良好的进展。回答得很好。嗨,Marek Musielak,你知道我们如何为SOLR配置相同的配置吗?我无法为SOLR找到任何解决方案。我想从Sitecore配置同义词文件。如果你能就此提供任何建议,那就太好了。谢谢