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 Elasticsearch对多个索引的结果进行排序,以便一个索引具有优先级_Sorting_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Indexing - Fatal编程技术网 elasticsearch,indexing,Sorting,elasticsearch,Indexing" /> elasticsearch,indexing,Sorting,elasticsearch,Indexing" />

Sorting Elasticsearch对多个索引的结果进行排序,以便一个索引具有优先级

Sorting Elasticsearch对多个索引的结果进行排序,以便一个索引具有优先级,sorting,elasticsearch,indexing,Sorting,elasticsearch,Indexing,我有6个网站,让我们称它们为A、B、C、D、E&M。M是主网站,因为从它你可以搜索其他网站的内容,我很容易做到这一点,在搜索查询中使用逗号分隔的所有索引 然而,我现在有一个新的要求,从每个网站,你可以搜索所有网站(容易做,应用解决方案从M到所有),但优先考虑从当前网站的结果 所以,如果我从C搜索,第一个结果应该来自C,然后是基于分数的其他结果 现在,我如何给出一个索引优先于其他索引的结果?A很好地满足了这一目的: 样本数据 查询 回应 笔记 你使负增长越小,那么“积极指数”的结果就越有可能胜过其

我有6个网站,让我们称它们为A、B、C、D、E&M。M是主网站,因为从它你可以搜索其他网站的内容,我很容易做到这一点,在搜索查询中使用逗号分隔的所有索引

然而,我现在有一个新的要求,从每个网站,你可以搜索所有网站(容易做,应用解决方案从M到所有),但优先考虑从当前网站的结果

所以,如果我从C搜索,第一个结果应该来自C,然后是基于分数的其他结果

现在,我如何给出一个索引优先于其他索引的结果?

A很好地满足了这一目的:

样本数据 查询 回应 笔记
  • 你使负增长越小,那么“积极指数”的结果就越有可能胜过其他指数
  • 如果您将
    负值\u boost
    设置为
    0
    ,您将保证“活动站点”结果首先排序,但您将放弃所有其他站点的所有分数,因此剩余的排序将是任意的

  • 我认为像
    negative\u boost:0.1
    ,这是一个数量级的相关性调整,应该可以满足您的需求。

    现在有没有办法限制结果的数量?因为在没有增加搜索量的情况下,我会得到600个搜索结果,现在我得到了1800多个搜索结果,我认为这已经接近了文档的总量,就像它不再有“分界点”一样。即使文档中没有关键字,它也会列出文档。如文档所述(以及我在ES 6.6和7.1中所测试的),增强查询应该只包括与
    肯定
    查询子句匹配的结果。您确定结果中没有您搜索的任何关键字吗?关于你在该查询中使用的
    肯定
    子句,你还有什么可以分享的吗?当然没有,在这个链接上,你可以看到我的未绑定然后增强的查询:这里是最后一个结果,准确地说是第1660位,它甚至有1.5分的分数!!!它只是一个被索引的空文档样本。然而,当搜索“dna”时,它会出现。。。问题不是boosting查询,而是您构建主bool查询的方式。如果同时包含
    必须
    子句和
    应该
    子句,则
    最小值应_匹配
    有效默认为
    0
    (即,
    必须
    子句的存在意味着您不再需要至少1个
    应该
    子句来命中)。我建议做两个改变:(#1)添加一个明确的
    最小匹配:1
    到你的顶级bool和(#2)将你的
    必须
    切换到
    过滤器
    (日期范围似乎对评分/相关性没有帮助,过滤器更便宜):
    POST /_bulk
    {"index":{"_index":"a"}}
    {"message":"First website"}
    {"index":{"_index":"b"}}
    {"message":"Second website"}
    {"index":{"_index":"c"}}
    {"message":"Third website"}
    {"index":{"_index":"d"}}
    {"message":"Something irrelevant"}
    
    POST /a,b,c,d/_search
    {
      "query": {
        "boosting": {
          "positive": {
            "match": {
              "message": "website"
            }
          },
          "negative": {
            "terms": {
              "_index": ["b", "c", "d"]
            }
          }, 
          "negative_boost": 0.2
        }
      }
    }
    
    {
      ...
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : 0.2876821,
        "hits" : [
          {
            "_index" : "a",
            "_type" : "_doc",
            "_id" : "sx-DkWsBHWmGEbsYwViS",
            "_score" : 0.2876821,
            "_source" : {
              "message" : "First website"
            }
          },
          {
            "_index" : "b",
            "_type" : "_doc",
            "_id" : "tB-DkWsBHWmGEbsYwViS",
            "_score" : 0.05753642,
            "_source" : {
              "message" : "Second website"
            }
          },
          {
            "_index" : "c",
            "_type" : "_doc",
            "_id" : "tR-DkWsBHWmGEbsYwViS",
            "_score" : 0.05753642,
            "_source" : {
              "message" : "Third website"
            }
          }
        ]
      }
    }