2016-09-22 63 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。 编辑:更新我上面的答案! :) –