【问题标题】:Search by exact words in a phrase using Umbraco Examine使用 Umbraco 检查按短语中的确切单词搜索
【发布时间】:2016-09-22 14:33:43
【问题描述】:

每个内容我都有一些 description 字段,它们是:

对于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的结果?

【问题讨论】:

    标签: lucene umbraco lucene.net


    【解决方案1】:

    默认情况下,检查将此查询编译为:

    +(+description:lazy dog)
    

    并基于它返回带有 lazydog 词的结果。

    你想要达到的是:

    +(+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(取决于所需的搜索行为)或构建更高级的原始查询。

    对于第一个选项,请查看 Grouped Operations 文档:https://github.com/Shazwazza/Examine/wiki/Grouped-Operations

    对于第二种情况,最好分析它是如何完成的,例如在 ezSearch 包中(顺便说一句,太棒了!):https://github.com/umco/umbraco-ezsearch/blob/master/Src/Our.Umbraco.ezSearch/Web/UI/Views/MacroPartials/ezSearch.cshtml.

    【讨论】:

    • 多个字段怎么样? (而不是description,我还想要titledescription等)
    • 根据具体情况,您可以更深入地手动创建查询或向字段列表添加更多属性(您的第一个解决方案)。如果 fluent API 阻止了您,请检查它在 ezSearch 中是如何完成的,例如,它是手动构建的:github.com/umco/umbraco-ezsearch/blob/master/Src/…。编辑:更新了我上面的答案! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多