Я использую Elasticsearch 7.6 и клиентский API PHP для всех операций. Я создал настройки и сопоставления индекса elasticsearch следующим образом
$params = [
'index' => 'elasticindex',
'body' => [
'settings' => [
"number_of_shards" => 1,
"number_of_replicas" => 0,
"index.queries.cache.enabled" => false,
"index.soft_deletes.enabled" => false,
"index.requests.cache.enable" => false,
"index.refresh_interval" => -1
],
'mappings' => [
'_source' => [
"enabled" => false
],
'properties' => [
"text" => [
"type" => "text",
"index_options" => "docs"
]
]
]
]
];
Мне удалось проиндексировать документ, используя следующий код
$params = array();
$params['index'] = 'elasticindex';
for($i = 1; $i <=2; $i++) {
$params['id'] = $i;
$params['body']['text'] = 'apple';
$responses = $client->index($params);
}
Но когда я использую следующий поисковый запрос
$params = [
'index' => 'elasticindex',
'body' => [
'query' => [
'match' => [
"text" => "apple"
]
]
]
];
$results = $client->search($params);
Я получаю пустые результаты следующим образом
Array
(
[took] => 3
[timed_out] =>
[_shards] => Array
(
[total] => 1
[successful] => 1
[skipped] => 0
[failed] => 0
)
[hits] => Array
(
[total] => Array
(
[value] => 0
[relation] => eq
)
[max_score] =>
[hits] => Array
(
)
)
)
Без создания шаблона статического индекса, если я попытаюсь выполнить индексацию, динамическое сопоставление elasticsearch будет работать хорошо, и я получаю результаты.
Цель состоит в том, чтобы эластичный поиск индексировал только идентификатор документа в своем инвертированном индексе, а не позицию или смещение, и я хочу получать только совпадающие идентификаторы документов в качестве результатов. Помощь очень ценится. Заранее спасибо!
id
в свое статическое сопоставление:"id": { "type": "keyword"},
Используйте<host>:9200/elasticsearch/_search?q=*:*
, чтобы увидеть, был ли ваш документ вообще проиндексирован (я бы выбрал имя индекса лучше, чемelasticsearch
, кстати. :-) - person MatsLindh   schedule 10.05.2020GET
интерфейсе до, когда он станет доступным для общего поиска - последний требует, чтобы сначала произошло обновление индекса. Возможно, вам потребуется добавитьrefresh=wait_for
в URL-адрес запроса индексации. - person MatsLindh   schedule 11.05.2020