2013-06-05 54 views

回答

4

根據我的理解,您希望能夠手動設置某些項目排除在搜索結果中。

最簡單的解決方案是將一些Exclude布爾標誌添加到基本模板,並在搜索項目時檢查此標誌。

另一種解決方案是創建一些設置頁面,其中multilist字段用於搜索中排除的項目,然後將所選項目的ID傳遞給搜索查詢,從搜索中排除它們。

+0

我有多列表字段來保存所有不需要的項目不被搜索。但是我如何更新我不想要的項目的lucene? – WenHao

+1

只需遍歷多列表值並添加一個新的'ID'作爲關鍵字,並添加一個'TermQuery',並將列表中的值作爲'Occur'設置爲'BooleanClause.Occur.MUST_NOT'。 –

3

下面是一個非常廣泛的概述,你需要做什麼才能做到這一點。它所做的是防止在sitecore中檢查複選框字段的項目甚至無法獲得索引。對不起,這並不容易!

要求:高級數據庫抓取:http://marketplace.sitecore.net/en/Modules/Search_Contrib.aspx

1)複選框字段添加到Sitecore的基本模板,標題或任何「從搜索中排除」。

2)創建您的自定義索引搜尋器,將索引新字段。

namespace YourNamespace 
{ 
    class MyIndexCrawler : Sitecore.SharedSource.SearchCrawler.Crawlers.AdvancedDatabaseCrawler 
    { 
     protected override void AddSpecialFields(Lucene.Net.Documents.Document document, Sitecore.Data.Items.Item item) 
     { 
      base.AddSpecialFields(document, item); 

      document.Add(CreateValueField("exclude from search", 
       string.IsNullOrEmpty(item["Exclude From Search"]) 
       ? "0" 
       : "1")); 

3)配置Lucene的,如果你不使用包括使用新的自定義索引爬蟲(Web.config文件)

<configuration> 
    <indexes hint="list:AddIndex"> 
    ... 
    <locations hint="list:AddCrawler"> 
     <master type="YourNameSpace.MyIndexCrawler,YourNameSpace"> 
     <Database>web</Database> 
     <Root>/sitecore/content</Root> 
     <IndexAllFields>true</IndexAllFields> 

4)配置您的搜索查詢

var excludeQuery = new BooleanQuery(); 
Query exclude = new TermQuery(new Term("exclude from search", "0")); 
excludeQuery.Add(exclude, BooleanClause.Occur.MUST); 

5)獲取您的搜索結果

var db = Sitecore.Context.Database; 
var index = SearchManager.GetIndex("name_of_your_index"); // I use db.Name.ToLower() for my master/web indexes 
var context = index.CreateSearchContext(); 
var searchContext = new SearchContext(db.GetItem(rootItem)); 

var hits = context.Search(excludeQuery, searchContext); 

注意:您顯然可以在這裏使用組合查詢來獲得更多的搜索靈活性!