Sitecore搜索匹配为空

时间:2016-11-27 11:54:06

标签: solr sitecore

我正在运行以下代码

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索引

1 个答案:

答案 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是网络一。

我知道这个答案很晚:-),但我希望它能帮助碰巧遇到此问题的其他人。