Lucene.net没有将搜索字符串

时间:2016-02-22 05:54:46

标签: c# umbraco search-engine lucene.net

我在Umbraco CMS上构建的网站上实施了网站搜索功能。对于网站搜索,我们使用Lucene.net,它可以轻松地与Umbraco集成。

如果我使用带有单个关键字的搜索字符串,则搜索效果很好。例如,有一个页面(在网站中),其标题为"国内使用视频许可证"。现在,如果我使用搜索字符串"国内"或"视频"有用。但如果我使用"国内视频"或"国内许可证",不返回任何结果。

我想构建一个不仅会返回整个"国内视频的匹配的查询。还有带文字的网页"国内的任何视频","国内"和"视频"在他们中。在返回的所有结果中,具有完全匹配的页面应该具有更高的分数,以便它们在搜索结果上占据显着位置。

有没有人有任何建议?我目前的代码如下:

var criteria = ExamineManager.Instance
    .SearchProviderCollection["WebSearcher"]
    .CreateSearchCriteria(IndexTypes.Content);
var filter =
    criteria.GroupedOr(
        new[]
        {
            "nodeName", "heading", "content", "metaKeywords", "title", "umbracoNaviHide", "umbracoUrlName",
            "umbracoUrlAlias", "metaCategory", "metaDescription", "metaTags", "heading", "subHeading",
            "quote", "author", "socialCopy", "socialTitle", "socialTitle2", "thumbTitle", "thumbTitle2",
            "thumbCopy", "thumbQuote", "url", "location", "question", "answer"
        }, query)
        .Compile();

var searchResults =
    ExamineManager.Instance.SearchProviderCollection["WebSearcher"].Search(filter)
        .OrderByDescending(x => x.Score).ThenByDescending(d => d.Fields["createDate"]);

1 个答案:

答案 0 :(得分:0)

我认为您需要使用搜索条件的GroupedOr方法来生成查询。

GroupedOr方法需要两个列表,一个是字段名,另一个是搜索关键字。 e.g。

var query = provider.CreateSearchCriteria(BooleanOperation.And)
    .GroupedOr(siteSearchFields,
    searchTerms).Compile();

这个要点中有一个完整的例子:https://gist.github.com/tarnacious/1399392