elasticsearch排序取决于请求命中的节点

时间:2019-05-16 16:09:33

标签: elasticsearch

我有3个节点(主节点和2个数据节点)的集群Elasticsearch 6.3.2。我对索引进行请求,结果顺序可以处于三种不同的状态

如果我从kibana提出了一些要求:

  • 获取索引/ _search?preference = node1-一种排序顺序
  • 获取索引/ _search?preference = node2-另一个排序顺序
  • 获取索引/ _搜索-可以是排序顺序的三种状态

请求正文始终不变

{
    "from": 0,
    "size": 30,
    "query": {...},
    "sort": [
        {"_score": {"order": "desc"}}, 
        {"_script": {
                "script": {
                    "source": "long code = doc[\"test\"].value; 
                    if(code== 0){return 4;} 
                    if(code== 1){return 2;} 
                    if(code== 2){return 1;} 
                    else return code;",
                    "lang": "painless"
                },
                "type": "string",
                "order": "desc"
            }
        }, 
        {"test1": {"order": "desc"}}, 
        {"test2": {"order": "asc"}}
    ]
    "highlight": {...}
}

我希望结果顺序始终是恒定的,但并非如此

1 个答案:

答案 0 :(得分:1)

这是一个已知问题,是由于bouncing results而发生的,可以通过始终为同一用户使用相同的分片来避免此问题,这可以通过将首选项参数设置为用户的任意字符串来完成。会话ID。正如Elasticsearch官方文档中所建议的那样,我们也避免在生产中使用preference参数。