是否可以将增强字段放在其他前面,如果它已经排序?
我的产品按热门ASC (整数)排序,但是我想在其他产品面前推出一些特定的产品,无论什么价值受欢迎。
我是Solr的新手,到目前为止,我需要使用 edismax ,对吗? 但我并不完全理解它是如何工作的,我总是首先将受欢迎的产品排序。
我有以下查询参数:
"sort": "popular ASC",
"bq": "(product_id: 123)^100",
答案 0 :(得分:3)
这在搜索中称为elevation
。
在solr中,QueryElevationComponent
可能就是您所需要的,
简要使用步骤:
solrconfig.xml
。elevate.xml
,并定义顶行,通常是指定文档ID。enableElevation
/ forceElevation
/ ..指定是否启用提升。是的,它适用于解析器DisMax
或eDisMax
。参考:
我用更好的一个更新了上面的引用链接,检查一下。
文档ID是文档的id
字段。
更重要的是:
queryFieldType
的{{1}}属性,它指定字段类型,因此决定使用的分析器,对于英文文本,您可能需要<searchComponent>
,不要使用默认{{} 1}},它不会分析查询输入。text_en
而不是string
。/elevate
,以便启用提升排序。/select
关于params:
enableElevation=true&forceElevation=true
,无论是启用提升,还是不覆盖排序,都意味着指定了fl=*,[elevated]
param时,提升的文档是否仍在最高位置取决于enableElevation
param。sort
,无论是强制提升,还是覆盖排序,都意味着指定forceElevation
param时,仍会将提升的文档放在顶部,然后对其他文档进行排序。 solrconfig.xml :(在forceElevation
之前添加)
sort
elevate.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>
此文件在启动时加载一次,更改后需要重新加载核心,例如通过solr admin。
查询示例:
答案 1 :(得分:2)
如果您想以正确的方式使用 edismax ,您需要考虑按相关性得分排序。 bf
(提升功能)只是对分数应用上瘾因素,但它不会对顺序进行任何更改,因为您没有按分数排序。如果您希望popular
因子增加您可以使用的文档分数,例如boost
参数来执行此操作。按照您可以用来获得良好结果的示例:
"sort": "score DESC",
"bq": "(product_id: 123)^100",
"boost": "popular"
答案 2 :(得分:0)
默认情况下,此组件遵循请求的排序参数:如果请求按日期排序,它将按日期排序结果。如果forceElevation = true(默认值),结果将首先返回提升的文档,然后按日期排序。
答案 3 :(得分:0)
"sort": "popular ASC",
"bq": "(product_id: 123)^100",
将其转换为此:
"sort": "score desc, popular ASC",
"bq": "(product_id: 123)^100",