Poniżej podano mój kod do generowania indeksu za pomocą elasticsearch.Index jest generowany pomyślnie. Zasadniczo używam go do generowania autosugestów w zależności od nazwy filmu, nazwy aktora i generatora.Elasticsearch dopasuj podciąg w php
Teraz moim wymaganiem jest, aby dopasować podciąg z konkretnym polem. Działa to dobrze, jeśli używam $params['body']['query']['wildcard']['field'] = '*sub_word*';
. (Tzn. Szukanie "do" daje "tom kruz", ale szukanie "tom kr" nie zwraca wyniku) .
Dopasowuje tylko konkretne słowo w łańcuchu. Chcę dopasować podciąg zawierający wiele słów (tj. 'Tom kr' powinien zwrócić 'tom kruz').
Znalazłem kilku dokumentów, mówiących, że będzie to możliwe przy użyciu "ngram". Ale nie wiem, jak mam go zaimplementować w moim kodzie, ponieważ korzystam z konfiguracji opartych na tablicy dla elasticsearch, a wszystkie dokumenty wsparcia wspominają konfigurację w json fromat.
Proszę o pomoc.
require 'vendor/autoload.php';
$client = \Elasticsearch\ClientBuilder::create()
->setHosts(['http://localhost:9200'])->build();
/*************Index a document****************/
$params = ['body' => []];
$j = 1;
for ($i = 1; $i <= 100; $i++) {
$params['body'][] = [
'index' => [
'_index' => 'pvrmod',
'_type' => 'movie',
'_id' => $i
]
];
if ($i % 10 == 0)
$j++;
$params['body'][] = [
'title' => 'salaman khaan'.$j,
'desc' => 'salaman khaan description'.$j,
'gener' => 'movie gener'.$j,
'language' => 'movie language'.$j,
'year' => 'movie year'.$j,
'actor' => 'movie actor'.$j,
];
// Every 10 documents stop and send the bulk request
if ($i % 10 == 0) {
$responses = $client->bulk($params);
// erase the old bulk request
$params = ['body' => []];
unset($responses);
}
}
// Send the last batch if it exists
if (!empty($params['body'])) {
$responses = $client->bulk($params);
}
Drogi costa, dziękuję za odpowiedź.Ale tylko zapytanie, czy jesteś pewien, że po uruchomieniu wyszukiwania wieloznacznego dla poszczególnych słów uzyskasz najbardziej trafne wyniki pasujące do podciągów wielostanowych? –