lucene - 使用 Umbraco Examine 按短语中的确切单词搜索

标签 lucene umbraco lucene.net

每个内容都有一些描述字段,它们是:

对于 content1:

敏捷的棕色狐狸跳过懒惰的狗。而且懒狗还不错。

对于 content2:

懒雾很疯狂。

现在,当我使用关键字 = 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 结果?

最佳答案

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

+(+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 .

关于lucene - 使用 Umbraco Examine 按短语中的确切单词搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641983/

相关文章:

lucene - 如何使用 lucene 删除/更新文档?

java - Hibernate 搜索 Lucene 重音不敏感搜索

visual-studio-2010 - 哪个版本的 UmbracoCMS 适用于 VS2010 .net Framework 4.0

c# - lucene.net 3.0.3 索引空间太慢

.net - 如何使用特定日期的 Sitecore 项目进行 Lucene 搜索?

c# - Lucene.Net 大于/小于 TermRangeQuery?

lucene - 使用 "and"运算符搜索多个字段(但使用字段自己的分析器)

azure - Umbraco:Azure Web Apps 上出现意外网络错误

javascript - 使用 Javascript 填充 Umbraco 内容表单