如何在Umbraco 7中检查以执行短语查询?

时间:2016-11-19 09:44:44

标签: lucene umbraco umbraco7 examine

我正在尝试在Umbraco 7(7.3.6)中构建一些自定义搜索逻辑,它将搜索用户提供的多个术语,其中这些术语可能包含用引号括起来的短语。

我有以下代码,它使用提供的术语,使用正则表达式来拆分单个术语(同时保留括号中的引号),然后使用一系列GroupedOr调用来搜索多个字段

var searcher = Examine.ExamineManager.Instance.SearchProviderCollection[this.searchConfig.SiteSearchProviderName];

var searchCriteria = searcher.CreateSearchCriteria(Examine.SearchCriteria.BooleanOperation.Or);

var splitTerms = Regex.Matches(term, @"[\""].+?[\""]|[^ ]+")
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();

var query = searchCriteria.GroupedOr(
    new[] { BaseContent.FIELD_NodeName },
    this.GetValues(splitTerms, 3, 0.8F))
.Or()
.GroupedOr(
    new[] { this.searchConfig.ContentFieldName },
    this.GetValues(splitTerms, 1, 0.8F));

这是GetValues方法:

private IExamineValue[] GetValues(string[] terms, float boost, float fuzziness)
{
    return terms
        .Select(t => t.Boost(boost).Value.Fuzzy(fuzziness))
        .ToArray();
}

我的索引中有一个文件,其中包含术语&#34;快速的棕色狐狸跳过懒狗&#34;。如果我通过上面的逻辑传递字符串"\"brown fox\""然后检查我的查询我可以看到我的query对象包含以下Lucene查询:

(nodeName:"brown fox"~0.8) (_content:"brown fox"~0.8)

但是,当我使用它来构建搜索查询时,我得到没有结果

var searchQuery = searcher
    .Search(query.Compile(), 100)
    .OrderByDescending(x => x.Score)
    .TakeWhile(x => x.Score > 0.05f);

但是如果我使用Luke运行完全相同的Lucene查询,我会得到我期望的结果。

有人能帮我理解吗?额外的标记,如果你能解释为什么我的提升值没有被添加到Lucene查询!!

0 个答案:

没有答案