代码之家  ›  专栏  ›  技术社区  ›  RHSeeger

向复杂的solr查询添加日期提升

  •  4
  • RHSeeger  · 技术社区  · 15 年前

    我目前有一个solr查询,它使用查询(q)、查询字段(qf)和短语字段(pf)来检索我想要的结果。一个例子是:

    /solr/select
    ?q=superbowl
    &qf=title^3+headline^2+intro+fulltext
    &pf=title^3+headline^2+intro+fulltext
    &fl=id,title,ts_modified,score
    &debugQuery=true
    

    其想法是,“主要项目”的标题和标题能够最好地指示结果是“关于”什么,但是引言和全文也提供了一些输入。也就是说,想象一个链接集合,其中集合本身有元数据(它是一个什么集合),但每个链接都有自己的数据(链接的标题、概要等)。如果我们搜索“超级碗”,最相关的结果是集合元数据中带有“超级碗”的结果,最不相关的结果是仅包含一个链接的概要中带有“超级碗”的结果…但它们都是有效的结果。

    我想做的是增加相关性得分,这样最新的结果就会浮到最上面,但保留标题、标题、简介、全文作为公式的一部分。在集合元数据中包含搜索字符串的最近结果将比仅在链接元数据中包含搜索字符串的结果更相关…但“仅链接”最近的结果可能比集合元数据中搜索字符串非常旧的结果更相关。(希望有点清楚)。

    问题是我不知道如何将solr站点上记录的boost函数与使用qf/pf字段相结合。明确地。。。

    在Solr网站上,类似以下的功能可以在日期前提高结果:

    /solr/select
    ?q={!boost%20b=$dateboost%20v=$qq}
    &dateboost=ord(ts_modified)
    &qq=superbowl
    &fl=ts_modified,score
    &debugQuery=true
    

    但是,我不知道如何将该查询与使用qf和pf相结合。任何建议都非常欢迎。

    多亏了丹本的回应,我才想出了以下几点:

    /solr/select
    ?q={!boost%20b=$dateboost%20v=$qq%20defType=dismax}
    &dateboost=ord(ts_modified)
    &qq=superbowl
    &qf=title^3+headline^2+intro^2+fulltext
    &pf=title^3+headline^2+intro^2+fulltext
    &fl=ts_modifieds,score
    &debugQuery=true
    

    我遇到的实际问题是:

    • 复制/粘贴时,我在q参数中留下了空格,而不是转义它们(%20)
    • 我的q参数中没有包含deftype=depax,因此它会注意qf/pf参数。
    2 回复  |  直到 11 年前
        1
  •  4
  •   danben    15 年前

    退房 http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_boost_the_score_of_newer_documents

    这是基于 ms 函数,返回两个时间戳/日期之间的毫秒差,以及 ReciprocalFloatFunction 它随着传递的值的减少而增加。

    由于您使用的是DestaxRequestHandler,因此可能需要使用 bq / bf 参数。从 http://lucene.apache.org/solr/api/org/apache/solr/handler/DisMaxRequestHandler.html :

    bq-(boost query)将包含在 用户查询以影响分数。如果 这是一个带有默认值的布尔查询 Boost(1.0f),然后是个人 条款将直接添加到 主要查询。否则,查询将 按原样包括在内。这个参数可以是 多次指定,并且 助推器是添加剂。注: 上述行为仅限于 如果单个BQ参数为 明确规定。因此,您可以通过 指定附加的空白BQ 参数。

    bf(增压功能)功能(带可选增压)将 包含在用户查询中 影响分数。格式为: “funca(arg1,arg2)^1.2 Funcb(arg3,arg4)^2.2“。注: 在中不允许空白 函数参数。这个参数可以是 多次指定,并且 函数是相加的。

        2
  •  0
  •   kenorb    11 年前

    下面是一篇关于提高Solr搜索结果的好文章:

    http://www.metaltoad.com/blog/date-boosting-solr-drupal-search-results


    在Drupal中,这可以通过以下代码简单实现:

    使用Apachesolr模块

    /**
     * Implements hook_apachesolr_query_alter().
     */
    function hook_search_apachesolr_query_alter(DrupalSolrQueryInterface $query) {
      $query->addParam('bf', array('freshness' =>
        'recip(abs(ms(NOW/HOUR,dm_field_date)),3.16e-11,1,.1)'
      ));
    }