2016-09-22 86 views
1

我有每個內容的一些description領域,而這些都是:通過精確的關鍵詞搜索中使用一把umbraco短語檢查

content1

The quick brown fox jumps over the lazy dog. And the lazy dog is good.

 

對於content2

The lazy fog is crazy.

現在,當我使用關鍵字= lazy dog,我想給的結果content1,而不是content2

我想這樣的:

BaseSearchProvider searcher = ExamineManager.Instance.SearchProviderCollection["MySearch"]; 
ISearchCriteria criteria = 
      searcher.CreateSearchCriteria() 
       .GroupedAnd(new List<string> { "description" }, "lazy dog")) 
       .Compile(); 

ISearchResults result = searcher.Search(criteria); 

但它並沒有給我想要的結果,它給我的結果:content1content2

我該怎麼做才能得到content1的結果?

回答

2

默認情況下,檢查正在編制此查詢到:

+(+description:lazy dog) 

,並在此基礎上它的返回與兩個結果:話。

你想達到什麼是:

的你需要嘗試什麼
+(+description:"lazy dog") 

首先是逃避的短語。在你的情況下,它將是:

BaseSearchProvider searcher = ExamineManager.Instance.SearchProviderCollection["MySearch"]; 
ISearchCriteria criteria = 
      searcher.CreateSearchCriteria() 
       .GroupedAnd(new List<string> { "description" }, "lazy dog".Escape())) 
       .Compile(); 

ISearchResults result = searcher.Search(criteria); 

現在不能測試它,但從我記憶中來看過去有些問題。第二個選項和您的救星,可能是手動構建搜索查詢並使用原始查詢。

BaseSearchProvider searcher = ExamineManager.Instance.SearchProviderCollection["MySearch"]; 
ISearchCriteria criteria = searcher.CreateSearchCriteria(); 

var query = criteria.RawQuery("+description:\"lazy dog\""); 

ISearchResults result = searcher.Search(query); 

而且它只會返回正確=匹配的結果。就我個人而言,我也用一些特定單詞來提高分數列表中的某些結果,但如果您只想匹配項目,請嘗試以上解決方案,並讓我知道它是否對您有幫助。

如果要處理多個屬性,可以使用一些流暢的API方法(如GroupedAnd或GroupedOr(取決於所需的搜索行爲)或構建更高級的原始查詢。

對於第一個選項,請檢查分組操作文檔:https://github.com/Shazwazza/Examine/wiki/Grouped-Operations

對於第二種情況,最好分析它是如何完成的,例如在ezSearch包(這btw。是真棒!):https://github.com/umco/umbraco-ezsearch/blob/master/Src/Our.Umbraco.ezSearch/Web/UI/Views/MacroPartials/ezSearch.cshtml

+0

多個字段如何? (而不是'description',我也想'title','description'等) –

+0

根據情況,您可以更多地手動創建查詢或將更多屬性添加到字段列表(您的第一個解決方案)。如果流利的API阻止了某些東西,請檢查它是如何在ezSearch中完成的,例如,它在哪裏手動進行配置:https://github.com/umco/umbraco-ezsearch/blob/master/Src/Our.Umbraco.ezSearch/Web /UI/Views/MacroPartials/ezSearch.cshtml。 編輯:更新我上面的答案! :) –