我已经实现了一个网站搜索功能在一个网站上建立在Umbraco。对于站点搜索,我们使用的是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"]);发布于 2016-02-22 09:52:34
我认为您需要使用搜索条件的GroupedOr方法来生成查询。
GroupedOr方法需要两个列表,一个是字段名,另一个是搜索关键字。例如:
var query = provider.CreateSearchCriteria(BooleanOperation.And)
.GroupedOr(siteSearchFields,
searchTerms).Compile();这个Gist中有一个完整的例子:https://gist.github.com/tarnacious/1399392
https://stackoverflow.com/questions/35546650
复制相似问题