3

如果已经排序,是否可以将提升的字段放在其他字段的前面?

我有按流行 ASC(它的整数)排序​​的产品,但是有一些特定的产品我想在其他产品之前提升,不管流行的价值是什么。

我是 Solr 的新手,到目前为止我需要使用edismax,对吗?但我不完全理解它是如何工作的,我总是先把流行的产品分类。

我有以下查询参数:

"sort": "popular ASC",
"bq": "(product_id: 123)^100",
4

4 回答 4

4

elevation这在搜索中调用。在 solr 中,QueryElevationComponent可能是您需要的,

简要使用步骤:

  • 中配置组件solrconfig.xml
  • 添加一个elevate.xml, 并定义最上面的行,通常通过指定文档 ID。
  • 查询时,使用param enableElevation// forceElevation.. 指定是否启用高程。是的,它与解析器DisMaxeDisMax.

参考:


@更新

我用一个更好的链接更新了上面的参考链接,检查一下。

文档 ID 是文档的id字段。

更重要的是:

  • queryFieldType属性<searchComponent>,它指定字段类型,从而决定使用的分析器,对于英文文本,你可能需要text_en,不要使用默认的string,它不会分析查询输入。
  • 查询时使用 request-handler/elevate而不是/select,。
  • 添加参数enableElevation=true&forceElevation=true,以便启用提升排序。
  • 附加字段“[elevated]”表示记录是否被提升,它具有布尔值,可以在“fl”参数中添加该字段,例如fl=*,[elevated]

关于参数:

  • enableElevation,是否启用提升,它不覆盖排序,意味着当sort指定参数时,提升的文档是否仍在顶部取决于forceElevation参数。
  • forceElevation, 是否强制提升,会覆盖排序,意思是当sort指定参数时,仍然会将提升的文档放在顶部,然后对其他文档进行排序。

这是我的例子:

solrconfig.xml:(添加之前</config>

  <!-- elevation -->
  <searchComponent name="elevator" class="org.apache.solr.handler.component.QueryElevationComponent" >
    <str name="queryFieldType">text_en</str>
    <str name="config-file">elevate.xml</str>
  </searchComponent>

  <requestHandler name="/elevate" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
    </lst>
    <arr name="last-components">
      <str>elevator</str>
    </arr>
  </requestHandler>

elevate.xml : (例如放入solr-5.4.1/server/solr/dummy/conf/)

<?xml version="1.0" encoding="UTF-8" ?>
<elevate>

 <query text="Eric">
  <doc id="1" />
  <doc id="2" />
  <doc id="3" />
 </query>

</elevate>

该文件在启动时加载一次,更改后需要重新加载核心,例如通过 solr admin。

查询示例:

于 2016-03-17T15:48:54.897 回答
2
"sort": "popular ASC",
"bq": "(product_id: 123)^100",

将此转换为:

"sort": "score desc, popular ASC",
"bq": "(product_id: 123)^100",
于 2019-09-10T08:30:14.843 回答
2

如果您想以正确的方式使用edismax,您需要考虑按相关性分数进行排序。( bfboost 函数) 只是将一个令人上瘾的因素应用于分数,但它不会对顺序进行任何更改,因为您没有按分数排序。如果您希望该popular因子增加文档分数,您可以使用例如boost参数来执行此操作。遵循一个可以用来获得良好结果的示例:

"sort": "score DESC",
"bq": "(product_id: 123)^100",
"boost": "popular"
于 2016-03-18T06:34:55.767 回答
0

默认情况下,该组件尊重请求的排序参数:如果请求要求按日期排序,它将按日期对结果进行排序。如果 forceElevation=true(默认值),结果将首先返回提升的文档,然后按日期排序。

于 2016-07-06T09:16:19.173 回答