【问题标题】:Setting Boost in Solr - Adding conditions在 Solr 中设置 Boost - 添加条件
【发布时间】:2014-05-13 12:37:27
【问题描述】:

我想知道是否有设置条件提升的方式/方法

例如: if( category:1 )( field_1^1.5 field_2^1.2 )else if( category:3 )( field_3^7.5 field_4^5.2 )

我打算这样设置“qf”和“pf”参数以提高我的结果,可以吗?

【问题讨论】:

    标签: php apache search solr search-engine


    【解决方案1】:

    从概念上讲 - 是的,它可以使用函数查询 (http://wiki.apache.org/solr/FunctionQuery) 来完成,它包含 if 函数,但我自己无法做到这一点,因为我无法使用 == 运算符。

    另外,您可以编写自己的函数查询。

    但无论如何,现在它更像是一个很好的起点,而不是具体的答案。

    【讨论】:

    • 如果可能的话,你能解释一下吗?举个例子
    • 函数查询示例?
    • 是的,如果可能的话,那会很有帮助。
    【解决方案2】:

    我认为你有两种方法可以做到这一点......

    1. 第一种方式,是在索引时进行简化,因此可能会在架构中创建其他冗余字段集(例如:boostfield_1、boostfield_2 等),如果文档类别为 1,则可以设置 boostfield_1 的值到 field_1,boostfield_2 到 field_2。但如果类别为 2,您可以将其设置为其他字段。

    这将允许您在没有任何条件的情况下立即使用“pf”,因为您已经在索引时指定了条件,并根据类别对文档进行了不同的索引。这样做的问题是,您将无法根据类别更改字段的提升值分数,但无论如何这是一种更简单的方法

    1. 使用_val_或bq参数来指定一个boost查询,同样的查询可以不同的写法,所以可以写成如下相同的条件:

      url?q=query AND _val_:"(category:1 AND (field_1:query OR field_2:query)) OR (category:3 AND field_2:query)"

    这里的小问题也是你在每个内部查询中重复查询文本,这不是什么大问题。

    【讨论】:

    • 第二种使用“val”的方法不等于“fl”(过滤)吗?它看起来很像。第一种方法看不懂,能不能再解释一下?
    • 使用_val_不会影响查询结果,只会影响boosting和scores。如果添加或删除 _val_ 不会对结果数量产生任何影响
    • 提到的第一种方法可以说有一个领域拥有诸如“丰田”、“三菱”、“铃木”、“福特”等汽车品牌。所以你说的是在索引索引时field_1、field_2、field_3 等几个字段中的字段值,然后使用“pf”或“qf”进行提升,对吗?所以你说的是在“bq”参数下给出查询,比如bq="(category:1 AND (field_1:query OR field_2:query)) OR (category:3 AND field_2:query)"
    • 是的,我想是的,bq 应该只影响分数,而不是匹配。所以,你可以保持 q 字段不变,bq 只会影响评分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多