# Preference / Explain

## Preference

控制要对其执行搜索请求的分片副本的首选项。默认情况下，操作在分片副本之间是随机化的。

首选项是一个查询字符串参数，可以设置为：

| `_primary`              | 操作将继续并只在主分片上执行。                                                                                |             |
| ----------------------- | ---------------------------------------------------------------------------------------------- | ----------- |
| `_primary_first`        | 操作将在主分片上执行，如果不可用（故障转移），将在其他分片上执行。                                                              |             |
| `_replica`              | 该操作将只在副本分片上执行。                                                                                 |             |
| `_replica_first`        | 操作将移动并仅在副本分片上执行，如果不可用（故障转移），则将在其他分片上执行。                                                        |             |
| `_local`                | 如果可能，操作将优选在本地分配的分片上执行。                                                                         |             |
| `_prefer_nodes:abc,xyz` | 在适用的情况下，在具有提供的节点标识（本例中为 abc 或 xyz ）的节点上优先执行。                                                   |             |
| `_shards:2,3`           | \`将操作限制为指定的分片。（在这种情况下为 2 和 3 ）。此首选项可以与其他首选项组合，但必须首先显示：\_shards：2,3                             | \_primary\` |
| `_only_nodes`           | 将操作限制在节点说明中指定的节点<https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.html> |             |
| Custom (string) value   | 自定义值将用于保证相同的自定义值使用相同的分片。当在不同的刷新状态中匹配不同的分片时，这可以帮助“跳跃值”。示例值可以是 Web 会话 ID 或用户名。                   |             |

例如，使用用户的会话 ID 来确保用户的结果的一致排序：

```
GET /_search?preference=xyzabc123
{
    "query": {
        "match": {
            "title": "elasticsearch"
        }
    }
}
```

## Explain

启用每次匹配对其评分计算方式的说明。

```
GET /_search
{
    "explain": true,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
```
