簡體   English   中英

Linq沒有使用sitecore solr

[英]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字段中(“貸款,汽車貸款,自行車貸款”),請記住此字段是標記化索引。 這意味着在存儲處理期間,查詢將使用空格和標點符號作為分隔符分割為標記,如下所示:

在此輸入圖像描述 在此輸入圖像描述
現在,如果我們使用EqualsContains進行搜索,搜索日志將為我們提供適當的序列化查詢以在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"

  1. 單獨搜索踏板車貸款 ,其中每個搜索查詢字詞完全匹配或包含在索引術語中
  2. 搜索滑板車貸款整體

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM