[英]Linq is not working with sitecore solr
我正在使用sitecore和solr顯示搜索結果。 方案是,如果用戶搜索某些內容,搜索代碼將首先檢查該關鍵字是否位於sitecore項目的“關鍵字”字段中,如果它發現它將顯示結果,如果找不到,則會在標題中檢查該關鍵字和描述字段。
現在的問題是 -
盡管關鍵字字段中包含值,但以下條件始終為false且永遠不會給出結果。
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)));
對於每個sitecore項目,我有標題,描述和關鍵字字段。
以下是詳細代碼段。
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; }
}
而且,這里是我的sitecore項目: http ://i.stack.imgur.com/liw59.png
鑒於您的Sitecore項目關鍵字位於SLT字段中(“貸款,汽車貸款,自行車貸款”),請記住此字段是標記化索引。 這意味着在存儲處理期間,查詢將使用空格和標點符號作為分隔符分割為標記,如下所示:
現在,如果我們使用Equals
和Contains
進行搜索,搜索日志將為我們提供適當的序列化查詢以在solr中進行測試:
等於 : ?q=keywordstest_t:("bike loan")
"scooter loan"
,我們將不會得到任何結果。 包含 : ?q=keywordstest_t:(*bike loan*)
"scooter L"
,我們會因為L而得到一個結果。 Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config
此值是否設置為true?
<indexAllFields>true</indexAllFields>
為了獲得最佳實踐,請創建一個新的搜索結果項類,該類繼承自Sitecore的基礎SearchResultItem
以便您可以使用此實例直接調用字段屬性“關鍵字”:
public class BasePageSearchResultItem : SearchResultItem { [IndexField("keywords")] public string Keywords { get; set; } }
應使用Equals
查詢在索引字段中查找其中一個術語:
var Query = searchContext.GetQueryable<SearchResultItem>() .Where(i => i.Keywords.Equals(SearchQuery));
結果集將取決於搜索查詢"scooter loan"
所規定的要求,並給出樣本項目的關鍵字字段值"Loans, Car Loan, Bike Loan"
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.