Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 用多个sort子句解释Solr中的排序_Sorting_Solr_Lucene_Explain - Fatal编程技术网

Sorting 用多个sort子句解释Solr中的排序

Sorting 用多个sort子句解释Solr中的排序,sorting,solr,lucene,explain,Sorting,Solr,Lucene,Explain,假设有一个包含多个sort子句的Solr请求(显然不在分数上)。是否有办法确定,对于每一份找到的文件,哪些条款导致了与邻居的联系,哪些条款实际上用于排序?我对一个子句特别感兴趣,并希望所有文档都因为它而重新排序 例如,我有sort=A desc,B asc,C asc,找到了三个文档,我需要找出哪些文档是根据B asc重新排序的: Doc 1: perhaps we skip it Doc 2: "B asc" meaning it has same A value with Doc 1 and

假设有一个包含多个sort子句的Solr请求(显然不在分数上)。是否有办法确定,对于每一份找到的文件,哪些条款导致了与邻居的联系,哪些条款实际上用于排序?我对一个子句特别感兴趣,并希望所有文档都因为它而重新排序

例如,我有
sort=A desc,B asc,C asc
,找到了三个文档,我需要找出哪些文档是根据
B asc
重新排序的:

Doc 1: perhaps we skip it
Doc 2: "B asc" meaning it has same A value with Doc 1 and B was used as tie breaker.
Doc 3: "A desc" meaning it has different A value from Doc 2 and therefore B was never used for sorting.
显然,有多种方法可以解决这个问题

  • 是否有解释结果的机制来解释排序而不是分数
  • 有没有一种方法可以指定两个sort=参数,用两组不同的子句对同一个docset进行排序,并将它们都作为响应,然后我可以比较docset
  • 是否有一种直接的方法可以为每对响应文档获取一个决定性的排序子句
  • 也许有一些搜索组件可以做到这一点?写起来有多难
  • 当然,如果做不到这一点,我可能只需要执行两个Solr请求(有和没有我关心的sort子句)并比较结果,显然我不想在性能方面这样做

    • 我能想到的最近的事情是。因此,您可以将您的特殊排序放入其中,可能使用val关键字将预期查询转换为从字段值派生的分数。但这只适用于数字或函数

      此外,排序参数仍将覆盖该参数,因为重新排序会影响原始分数。因此,您必须将所有内容移到评分函数中。如果按文本字段排序,可能会出现问题


      所以,这在Solr中可能不值得做。如果您可以使用双重查询,这可能是最简单的方法。

      将一个文档与另一个文档进行比较,以确定哪个字段是最重要的字段。假设存储了排序字段,那么您自己做决定似乎并不太复杂。就像:
      if(doc1.A!=doc2.A然后是A;else-if(doc1.B!=doc2.B然后是B;else-C;)
      @femtoRgon我不是每天都有相同的排序。昨天它可能是“一个描述”,现在它是“C asc”,明天它是一个公式,使得复制变得棘手。