2013-03-13 39 views
1

我有數以百萬計的數據庫中的項目。用戶可以根據關鍵字搜索這些項目。在搜索功能中,我需要提供搜索NOT關鍵字的功能。如何搜索使用Sitecore高級數據庫爬網程序不包含某些關鍵字的項目?

例如Item A有一個名爲msg的字段,值爲Sitecore is awesome and great。 在搜索框中,用戶可以選中指示顯示任何不包含關鍵字的項目的複選框。也許用戶鍵入is關鍵字,因此Item A將不會被ADC顯示或檢索。

編輯:目前我正在使用sitecore6.6,因此Search方法已被棄用。我通過使用Occurrence.MustNot嘗試了Not關鍵字,但它不返回任何結果。

+0

- Lucene的? – herskinduk 2013-03-13 09:02:49

+0

@herskinduk yupe,lucene搜索 – WenHao 2013-03-18 07:45:30

回答

0

Sitecore高級數據庫爬網程序是Sitecore.Search API和Sitecore.Search API的擴展,它是Lucene的封裝。

在Lucene的你可以用NOT-用戶查詢,以排除類似"Sitecore NOT awesome""Sitecore -awesome"

排除至少需要一個包含術語的內容。

不知道它是否有效,但試試看。

0

這是未經測試的,但您可能有運氣使用MatchAllDocsQuery並以Filter的形式提供關鍵字。

BooleanQuery booleanQuery = new BooleanQuery(); 

QueryParser queryParser = new QueryParser("msg", new StandardAnalyzer()); 
Query userQuery = queryParser.Parse("Sitecore is awesome and great"); 
booleanQuery.Add(userQuery, reverseQuery.Checked ? BooleanClause.Occur.MUST_NOT : BooleanClause.Occur.MUST); 

MatchAllDocsQuery matchAllQuery = new MatchAllDocsQuery(); 
Filter filter = new QueryFilter(booleanQuery); 

using (QueryRunner queryRunner = new QueryRunner("myIndex")) 
{ 
    var skinnyItems = queryRunner.RunQuery(matchAllQuery, filter, ...) 
} 
0

我做了什麼不包括與設定的結果項目相關聯的關鍵詞是:您使用的搜索什麼

protected List<Item> getSearchResults(string queryToSearch, string selectedFilter, string notToSearch) 
    { 
     Database db = Sitecore.Context.Database; 
     var index = SearchManager.GetIndex("siteSearchIndexName"); 

     using (SortableIndexSearchContext context = new SortableIndexSearchContext(index)) 
     { 
      if (!String.IsNullOrWhiteSpace(query)) 
      { 
       query.ToLower(); 
       CombinedQuery cq = new CombinedQuery(); 
       QueryBase qbKeyword = new FieldQuery("_orderkeywordpair", query); 
       QueryBase qbContent = new FieldQuery("_content", query); 
       QueryBase qbHtml = new FieldQuery("html", query); 

       if (!String.IsNullOrWhiteSpace(selectedFilter) && selectedFilter.ToLower() != "all") 
       { 
        QueryBase qbFilter = new FieldQuery("_pagetype", selectedFilter); 
        cq.Add(qbFilter, QueryOccurance.Must); 
       } 
       cq.Add(qbKeyword, QueryOccurance.Should); 
       cq.Add(qbContent, QueryOccurance.Must); 
       cq.Add(qbHtml, QueryOccurance.MustNot); 

       SearchHits hits = context.Search(cq); 
+0

我目前使用的是sitecore 6.6,所以context.Search是一個不推薦的方法。有沒有其他方法可以做到這一點? – WenHao 2013-03-18 09:26:20

相關問題