【问题标题】:Lucene.net is not separating keywords from search stringLucene.net 没有将关键字与搜索字符串分开
【发布时间】:2016-02-22 05:54:45
【问题描述】:

我在基于 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"]);

【问题讨论】:

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


    【解决方案1】:

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

    GroupedOr 方法需要两个列表,一个是字段名称,一个是搜索关键字。例如

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

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

    【讨论】:

    • 通过这样做,我遇到了“maxClauseCount 设置为 1024”错误。如何增加最大子句计数的值?在检查中找不到配置值或任何参数。
    • 您可以使用检查索引事件将您要搜索的所有字段连接到一个字段中,这样您只需搜索一个字段,而不是很多?
    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2023-03-17
    • 2022-11-01
    相关资源
    最近更新 更多