【发布时间】:2016-06-14 11:12:11
【问题描述】:
我正在使用 sitecore 和 solr 显示搜索结果。场景是如果用户搜索某些东西,搜索代码首先会检查该关键字是否在站点核心项目的“关键字”字段中,如果找到它将显示结果,如果没有找到,它将检查标题中的该关键字和描述字段。
现在的问题是 -
尽管关键字字段中有值,但以下条件始终为假并且永远不会给出结果。
var Query = searchContext.GetQueryable<SearchResultItem>()
.Where(i => (i["keywords"].Contains(SearchQuery)));
标题和描述的相同查询工作正常
var Query2 = searchContext.GetQueryable<SearchResultItem>()
.Where(i => (i["title"].Contains(SearchQuery)
|| i["description"].Contains(SearchQuery)));
对于每个站点核心项目,我都有标题、描述和关键字字段。
下面是详细代码sn-p。
public class SearchModel
{
public string SearchQuery { get; set; }
List<WebSiteSearchResult> lst = new List<WebSiteSearchResult>();
public IEnumerable<WebSiteSearchResult> SiteSearchResult()
{
var searchContext = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext();
var Query = searchContext.GetQueryable<SearchResultItem>().Where(i => (i["keywords"].Contains(SearchQuery)));
var result = Query.GetResults();
if (result.TotalSearchResults != 0)
{
//some operations
}
else
{
var Query2 = searchContext.GetQueryable<SearchResultItem>().Where(i => (i["title"].Contains(SearchQuery) || i["description"].Contains(SearchQuery)));
var result2 = Query2.GetResults();
if (result2.TotalSearchResults != 0)
{
//some operations
}
}
lst = lst.OrderBy(i => i.itemBoostingRatio).ToList();
return lst;
}
}
public class WebSiteSearchResult
{
public string itemKeywords { get; set; }
public int itemBoostingRatio { get; set; }
public string itemTitle { get; set; }
public string itemDescription { get; set; }
}
还有,这是我的站点核心项目:http://i.stack.imgur.com/liw59.png
【问题讨论】:
-
您的索引文件是否包含关键字?
-
您可以直接在索引上检查您的查询吗?您可以在搜索日志中找到查询。还要检查关键字字段是否在索引中-也许还要检查描述字段,因为您的第二个查询可能仅对标题起作用..
-
试试这个: var Query = searchContext.GetQueryable
() .Where(i => (i["keywords"].ToString().Contains(SearchQuery.ToString()))) ;因为可能存在类型不匹配的问题 -
正如 Ben 在下面描述的那样,您应该以强类型的方式使用您的 WebsiteSearchResult 类的字段。并且还要检查 Solr 中的实际字段名称是否正确 - 例如标题实际上可能是 Solr 中的 title_t。这里有一个基本指南。 bekagool.com/news-and-insights/…