【问题标题】:solr : how to boost query term after tokenizersolr:如何在分词器之后提升查询词
【发布时间】:2012-09-29 06:32:25
【问题描述】:

如果查询词是“ABCD”,那么被分词后就是“A”“BC”“D”。我想提升词“BC”,所以查询词是这样的:

A BC^10 D”和短语查询“ABCD”

用户输入的所有查询词都将被自动处理,以便提升重要的查询词。

我想我可以自定义一个新的Tokenizer来做,但不知道是否可行,或者有没有其他更简单的方法。

【问题讨论】:

    标签: solr tokenize solr-boost


    【解决方案1】:

    您可以使用QueryElevationComponent 执行此操作。如果您在 elevate.xml 文件中放入像 BC 这样的词,那么这些词将在查询时自动提升。当然,如果您已将组件添加到请求处理程序中。

    编辑:

    我认为您的意思是增加术语而不是术语的文档。 我认为在您的情况下,如果您使用正则表达式和白名单查找特定术语并在发送到 solr 之前更改字符串以包含提升,它可能会起作用。

        [Fact]
        public void Boost()
        {
            var query = "ABCD";
            var importantTerms = new List<string>{ "BC"};
            importantTerms.ForEach(term => query = query.Replace(term, string.Format("+{0}^10+", term)));
            Assert.Equal("A+BC^10+D", query);
        }
    

    【讨论】:

    • 使用 QueryElevationComponent ,如果查询词与 elevate.xml 文件中的词匹配,将返回特定的 docid。但我只是想提升那个词。使用正则表达式查找特定术语就可以了,所以我需要自定义一个 Tokenizer 或过滤器来更改字符串以提升特定术语?
    • 否,在 solr 标记查询之前需要指定提升。您需要在客户端代码中将 ABCD 转换为 A+BC^10.0+D。我将编辑答案以在 C# 中显示一个示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多