如何获得在Sitecore的搜索droplink和树形列表值。 下面是我的代码和配置文件。 但是当我根据droplink和树形列表值搜索它不是在搜索结果的到来。
VAR fquery =新FullTextQuery(搜索); SearchHits searchHits = sc.Search(fquery,int.MaxValue); 返回searchHits.FetchResults(0,int.MaxValue)。选择(R => r.GetObject())ToList();
配置文件条目。
我不知道如果我要分析它们或别的东西。 展望未来寻求帮助。
你不说你正在使用的Sitecore的版本,但说话的人谁与V6.6工作:
基于ID的领域,如在Sitecore的数据库的TreeList店的GUID。 在索引时间,Sitecore的解析到这些短ID格式并强制小写。 所以Lucene索引条目实际上包含没有花括号或连字符GUID小写。
机会是,你的基于文本的查询不会包含文本,将符合这一点。
我倾向于使用基于期限BooleanQuery对象匹配基于ID字段。 就像是:
BooleanQuery query = new BooleanQuery();
query.Add(new TermQuery(new Term("myfieldname", ShortID.Encode(myGuidToMatch).ToLowerInvariant())), BooleanClause.Occur.MUST);
请注意,字段名要查询应该是较低的情况下,作为Sitecore的/ Lucene的一般小写工作。
您可能会发现这个博客帖子有帮助的代码和用户界面的例子来看看针对基于ID字段建立查询的例子: http://jermdavis.wordpress.com/2014/06/09/faceted-search-in-sitecore- 6-6 /
如果您希望能够匹配包含在从搜索框的免费文本类型,这些字段中的值,那么你将有预先处理的值从这些基于ID字段他们被编入索引后。
Sitecore的和Lucene允许在你的指数“计算的领域”的想法 - 基本上你可以配置索引过程,以便处理在索引时间数据上运行自己的代码位,并创建一个从结果新Lucene索引字段你的代码。
这个矿的博客文章给出了一个计算字段的例子: http://jermdavis.wordpress.com/2014/05/05/using-dms-profile-cards-as-search-metadata/这个例子是不是做你希望 - 但它确实谈谈如何您可以配置这些自定义字段中的一个。
你可能会想你的自定义字段代码:
- 获取基于ID字段的原始值
- 加载项,此ID分
- 处理该项目把它变成文字的模式要被索引
- 返回此文字,要保存到在Lucene中计算字段
做完这些后,你会发现,你的指数将包含与您的ID字段(S)相关联的文本。 因此,你应该能够使用基于文本的查询相匹配。
-编辑补充-
创建计算索引项目的更多细节:
Sitecore的6.6不直接支持在Lucene索引计算领域。 为了让他们可以利用先进的数据库抓取的-这是在GitHub上可用的Sitecore的SearchContrib项目的一部分: https://github.com/sitecorian/SitecoreSearchContrib有大约在开始使用此代码各类博客文章。
[注:在Sitecore的7.x中我认为这种行为已经迁移到Sitecore的核心。 但是我认为,他们改变的东西的名称。 的那细节通过谷歌是可用的-比如升级Sitecore的6.6索引配置7(使用ComputedFields)至Sitecore的例如]
一个充满活力的领域把事情的代码基于身份转换成文本可能看起来像:
public class IndexIDField : BaseDynamicField
{
public override string ResolveValue(Sitecore.Data.Items.Item item)
{
Field fld = item.Fields["FieldYouAreInterestedIn"];
if (fld != null && !string.IsNullOrWhiteSpace(fld.Value))
{
string[] ids = fld.Value.Split('|');
StringBuilder text = new StringBuilder();
foreach (string id in ids)
{
Item relatedItem = item.Database.GetItem(id);
if (relatedItem != null)
{
text.Append(relatedItem.DisplayName);
text.Append(" ");
}
}
return text.ToString();
}
return null;
}
}
这是提取这是一个在传递的上下文项的相应字段如果它存在,而不是空的,它通过将其分解。“|” 获得存储在这一领域的所有ID的列表。 然后,对于每一个它尝试进行加载。 注意使用的输入项指定相应的数据库 - Sitecore.Context.Database将指向核心在这一点上,你不会找到你的项目有。 最后,如果我们从ID得到一个有效的项目,我们追加了显示名称,我们的文本建立索引。 你可以使用其他领域比显示名称 - 这取决于您的解决方案是有道理的。
与该代码添加到您的解决方案,你需要确保它被称为索引生成时间。 对于高级数据库抓取的默认配置包括动态字段config元素。 (再次,SC7.x将有类似的东西,但我不知道把我的头顶部的名称),你需要你的类型添加到动态域的配置。 从剪断了所有的外来位默认配置 :
<configuration xmlns:x="http://www.sitecore.net/xmlconfig/">
<sitecore>
<!-- snip -->
<search>
<!-- snip -->
<crawlers>
<demo type="scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler,scSearchContrib.Crawler">
<!-- snip -->
<dynamicFields hint="raw:AddDynamicFields">
<!-- snip -->
<dynamicField type="YourNamespace.IndexIDField,YourDLL" name="_myfieldname" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
</dynamicFields>
<!-- snip -->
</demo>
</crawlers>
</search>
</sitecore>
</configuration>
这建立了一个名为“_myfieldname”与索引文本明智的选择新的领域。
重建您的搜索索引,你应该找到你的自由文本查询将匹配合适的项目。 在SC6.6的实例测试这些基本设置,我得到我碰巧已经躺在附近的一些测试数据命中。 如果搜索我的计算列“蓝”我只得到其中被标记与在其名称中有“蓝色”元数据项行: