我正在运行以下代码
IQueryable<customSearchResultItem> query = context.GetQueryable<customSearchResultItem>().Where(CombinPredicates);
var hits = query.GetResults().Hits;
Sitecore.Diagnostics.Log.Info("search query hits:" + hits.Count(), context.Index);
foreach (var item in hits)
{
string builder = string.Empty;
try
{
string docitemid = item.Document.ItemId.ToString();
Sitecore.Diagnostics.Log.Info("document itemid:" + docitemid, item);
Item resultItem = item.Document.GetItem();
}
catch (Exception ex)
{
Sitecore.Diagnostics.Log.Info("search error going through hits:" + ex.Message, ex);
builder += item.Document.ItemId.ToString() + "\n";
continue;
}
}
以上实际上在“命中”变量中返回结果。但是,我得到的结果为零,呈现在网站的前端。上面的代码是我的调试代码,看看发生了什么。
随着我的回击,我只是循环,仅此而已。 执行循环并写入日志时,以下2行实际上按预期返回,即有效的Sitecore itemID
string docitemid = item.Document.ItemId.ToString();
Sitecore.Diagnostics.Log.Info("document itemid:" + docitemid, item);
但是,以下一行
Item resultItem = item.Document.GetItem();
返回NULL
为什么会这样?
进一步复杂化,此代码实际工作在一个环境而不是另一个环境,因此调试的原因。 此外,Sitecore项目同时显示主数据库和Web数据库以及SOLR索引
答案 0 :(得分:0)
我在通过Stage Sitecore实例建立索引的Prod(网络)环境中进行搜索时遇到了类似的问题。我相信GetItem()方法使用的数据库,项目ID ,语言和版本搜索结果项,它是从 _uniqueid 解析出来的,它看起来像这样:
...
"_uniqueid":"sitecore://stage/{d31b5802-c123-4690-86ff-8566dc896814}?lang=en&ver=1&ndx=my_site_index"
...
因此,在我的情况下,它找不到Sitecore项,因为它在 stage 数据库中查找,该数据库作为我的Sitecore.Context.Database是网络一。
我知道这个答案很晚:-),但我希望它能帮助碰巧遇到此问题的其他人。