Lucene 使用Umbraco Examine按短语中的确切单词进行搜索

Lucene 使用Umbraco Examine按短语中的确切单词进行搜索,lucene,umbraco,lucene.net,Lucene,Umbraco,Lucene.net,我对每个内容都有一些描述字段,这些字段是: 对于内容1: 敏捷的棕色狐狸跳过了懒狗。懒狗也很好。 对于内容2: 懒雾真是疯了。 现在,当我使用keyword=lazy dog时,我希望给出的结果是content1,而不是content2 我试着说: BaseSearchProvider searcher = ExamineManager.Instance.SearchProviderCollection["MySearch"]; ISearchCriteria criteria =

我对每个内容都有一些
描述
字段,这些字段是:

对于
内容1

敏捷的棕色狐狸跳过了懒狗。懒狗也很好。

对于
内容2

懒雾真是疯了。

现在,当我使用keyword=
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 );
BaseSearchProvider searcher=ExamineManager.Instance.SearchProviderCollection[“MySearch”];
ISearch标准=
searcher.CreateSearchCriteria()
.GroupedAnd(新列表{“description”},“lazy dog”))
.Compile();
ISearchResults结果=searcher.Search(条件);
但是它没有给我想要的结果,它给了我结果:
content1
content2


要获得as
content1
结果,我应该做什么?

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

+(+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 );
它应该只返回正确=匹配的结果。就我个人而言,我也使用了一些特定词汇来提高分数列表中的一些结果,但是如果你只想有匹配的项目,请尝试上述解决方案,并让我知道它是否对你有帮助

如果要处理多个属性,可以使用一些流畅的API方法,如GroupeAnd或GroupedOr(取决于所需的搜索行为),或者构建更高级的原始查询

对于第一个选项,请选中分组操作文档:


对于第二种情况,最好分析它是如何完成的,例如在ezSearch包中(顺便说一句,这是非常棒的!):。

多个字段如何?(除了
description
,我还需要
title
description
等)根据场景的不同,您可以更多地手动创建查询或向字段列表添加更多属性(您的第一个解决方案)。如果fluent API用某些东西阻止了您,请检查它在ezSearch中是如何完成的,例如,它是手动构造的:。编辑:更新了上面的我的答案!:)
BaseSearchProvider searcher = ExamineManager.Instance.SearchProviderCollection["MySearch"];
ISearchCriteria criteria = searcher.CreateSearchCriteria();

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

ISearchResults result = searcher.Search( query );