我正在运行以下代码
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索引
我遇到了一个类似的问题,我在通过舞台Sitecore实例索引的产品(Web)环境项目中搜索。我相信getItem()方法使用 database , item id , language 和版本搜索结果项目,它是从看起来像这样的 _uniqueid 中解析的:
...
"_uniqueid":"sitecore://stage/{d31b5802-c123-4690-86ff-8566dc896814}?lang=en&ver=1&ndx=my_site_index"
...
因此,就我而言,它找不到Sitecore项目,因为它在 stage 数据库中查看,其中我的sitecore.context.database是 web 一。
我知道这个答案迟到了:-),但我希望它可以帮助碰巧遇到这个问题的其他人。