'suggest' ElasticSearch 索引的映射没有 return 结果
'suggest' mapping for ElasticSearch index doesn't return results
我有一个如下所示的索引
[question_index] => Array
(
[mappings] => Array
(
[QUESTION] => Array
(
[properties] => Array
(
[body] => Array
(
[type] => string
)
[general_suggest] => Array
(
[type] => completion
[analyzer] => simple
[payloads] => 1
[preserve_separators] => 1
[preserve_position_increments] => 1
[max_input_length] => 50
)
)
)
)
)
我使用以下 PHP 代码添加了建议映射。
$param['index'] = 'question_index';
$param['type'] = 'QUESTION';
$param['body'] = array(
'_source' => array(
'enabled' => true
),
'properties' => array(
'body' => array('type' => 'string'),
'general_suggest' => array(
'type' => 'completion',
'index_analyzer' => 'simple',
'search_analyzer' => 'simple',
'payloads' => true
)
)
);
$result = $client->indices()->putMapping($param);
我尝试使用以下 PHP 代码获得建议的结果
$param = array();
$param['index'] = 'question_index';
$param['body']['text'] = 'someth';//should return 'something' as a suggest
$param['body']['completion']['field'] = 'general_suggest';
$result = $client->suggest($param);
每当我 运行 上述代码时,我都会收到以下错误。
Array
(
[_shards] => Array
(
[total] => 5
[successful] => 0
[failed] => 5
[failures] => Array
(
[0] => Array
(
[index] => question_index
[shard] => 0
[reason] => BroadcastShardOperationFailedException[[question_index][0] ]; nested: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchIllegalArgumentException[[suggest] does not support [field]];
)
有人知道这里的问题是什么吗?我使用的索引或参数是否设置不正确?
请注意,我使用的是 PHP 客户端库,而不是直接通过 HTTP 访问 API。
尝试将您的查询包装在另一个数组中,如下所示:
$param = array();
$param['index'] = 'question_index';
$param['body']['suggestions']['text'] = 'someth';//should return 'something' as a suggest
$param['body']['suggestions']['completion']['field'] = 'general_suggest';
$result = $client->suggest($param);
$param 变量将如下所示:
$param = array(
'index' => 'question_index',
'body' => array(
'suggestions' => array(
'text' => 'someth',
'completion' => array(
'field' => 'general_suggest'
)
)
)
);
请注意,已添加 "suggestions";你可以用任何你想要的替换它。
我让它可以使用以下设置。
1。先设置索引
$client = new Elasticsearch\Client();
$param = array();
$param['index'] = 'user_index';
$param['type'] = 'user';
$param['body'] = new stdClass();
$client->create($param);
2。为建议设置映射
$param = array();
$param['index'] = 'user_index';
$param['type'] = 'user';
$param['body'] = array(
'properties' => array(
'body' => array(
'type' => 'string'
),
'autosuggest' => array(
'type' => 'completion',
'index_analyzer' => 'simple',
'search_analyzer' => 'simple',
'payloads' => true
)
)
);
$client->indices()->putMapping($param);
3。将文档添加到索引
//assume $user is an object available to you
$params = array();
$params['body'] = array(
'autosuggest' => array(
'input' => [$user->full_name, $user->username],
'output' => $user->full_name,
'payload' => array(
'id' => $user->id,
'full_name' => $user->full_name,
'username' => $user->username,
'type' => 'user'
)
),
'body' => $user->full_name . "(@{$user->username})",
);
$params['index'] = 'user_index';
$params['type'] = 'user';
$params['id'] = $user->id;
$client->index($params);
4。最后,获取建议的方式
$client = new Elasticsearch\Client();
$param = array();
$param['index'] = 'user_index';
$param['body']['search_suggest']['text'] = 'search_query_here';
$param['body']['search_suggest']['completion']['field'] = 'autosuggest';
$results = $client->suggest($param);
我有一个如下所示的索引
[question_index] => Array
(
[mappings] => Array
(
[QUESTION] => Array
(
[properties] => Array
(
[body] => Array
(
[type] => string
)
[general_suggest] => Array
(
[type] => completion
[analyzer] => simple
[payloads] => 1
[preserve_separators] => 1
[preserve_position_increments] => 1
[max_input_length] => 50
)
)
)
)
)
我使用以下 PHP 代码添加了建议映射。
$param['index'] = 'question_index';
$param['type'] = 'QUESTION';
$param['body'] = array(
'_source' => array(
'enabled' => true
),
'properties' => array(
'body' => array('type' => 'string'),
'general_suggest' => array(
'type' => 'completion',
'index_analyzer' => 'simple',
'search_analyzer' => 'simple',
'payloads' => true
)
)
);
$result = $client->indices()->putMapping($param);
我尝试使用以下 PHP 代码获得建议的结果
$param = array();
$param['index'] = 'question_index';
$param['body']['text'] = 'someth';//should return 'something' as a suggest
$param['body']['completion']['field'] = 'general_suggest';
$result = $client->suggest($param);
每当我 运行 上述代码时,我都会收到以下错误。
Array
(
[_shards] => Array
(
[total] => 5
[successful] => 0
[failed] => 5
[failures] => Array
(
[0] => Array
(
[index] => question_index
[shard] => 0
[reason] => BroadcastShardOperationFailedException[[question_index][0] ]; nested: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchIllegalArgumentException[[suggest] does not support [field]];
)
有人知道这里的问题是什么吗?我使用的索引或参数是否设置不正确?
请注意,我使用的是 PHP 客户端库,而不是直接通过 HTTP 访问 API。
尝试将您的查询包装在另一个数组中,如下所示:
$param = array();
$param['index'] = 'question_index';
$param['body']['suggestions']['text'] = 'someth';//should return 'something' as a suggest
$param['body']['suggestions']['completion']['field'] = 'general_suggest';
$result = $client->suggest($param);
$param 变量将如下所示:
$param = array(
'index' => 'question_index',
'body' => array(
'suggestions' => array(
'text' => 'someth',
'completion' => array(
'field' => 'general_suggest'
)
)
)
);
请注意,已添加 "suggestions";你可以用任何你想要的替换它。
我让它可以使用以下设置。
1。先设置索引
$client = new Elasticsearch\Client();
$param = array();
$param['index'] = 'user_index';
$param['type'] = 'user';
$param['body'] = new stdClass();
$client->create($param);
2。为建议设置映射
$param = array();
$param['index'] = 'user_index';
$param['type'] = 'user';
$param['body'] = array(
'properties' => array(
'body' => array(
'type' => 'string'
),
'autosuggest' => array(
'type' => 'completion',
'index_analyzer' => 'simple',
'search_analyzer' => 'simple',
'payloads' => true
)
)
);
$client->indices()->putMapping($param);
3。将文档添加到索引
//assume $user is an object available to you
$params = array();
$params['body'] = array(
'autosuggest' => array(
'input' => [$user->full_name, $user->username],
'output' => $user->full_name,
'payload' => array(
'id' => $user->id,
'full_name' => $user->full_name,
'username' => $user->username,
'type' => 'user'
)
),
'body' => $user->full_name . "(@{$user->username})",
);
$params['index'] = 'user_index';
$params['type'] = 'user';
$params['id'] = $user->id;
$client->index($params);
4。最后,获取建议的方式
$client = new Elasticsearch\Client();
$param = array();
$param['index'] = 'user_index';
$param['body']['search_suggest']['text'] = 'search_query_here';
$param['body']['search_suggest']['completion']['field'] = 'autosuggest';
$results = $client->suggest($param);