Öncelikle ElasticSearch kullandıysan arama algoritmasını kendin belirliyorsun. Match, Equal gibi filtreler var, % kaç eşit olursa kayıtlar gelsin gibi oldukça detaylı arama işlemleri geliştirebilirsin. Benim nasıl kullandığımı paylaşayım fikir verir. Dediğim gibi 2 seneyi geçti yapalı o yüzden detaylarını dökümandan incelemek lazım. Aşağıdaki kodu hem ElasticSearch client nesnesinin parametrelerini döndürmesi hemde paginate ile kullanabilmek için hazırlamıştım. Fikir verebilir.
private function getByPageWithQuery($page = 1, $limit = 15)
{
$page -= 1;
$from = $page * $limit;
$should_array = array();
if (Input::has('string')) {
array_push($should_array, array(
'multi_match' => array(
'query' => SddForm::searchString(Input::get('string')),
"fields" => [ "karar_metni", "karar_kavram"],
"type" => "phrase_prefix"
)
));
array_push($should_array, array(
'multi_match' => array(
'query' => SddForm::searchString(Input::get('string')),
"fields" => [ "karar_metni", "karar_kavram"],
"type" => "cross_fields",
)
));
}
if (Input::has('esas_no')) {
array_push($should_array, array(
'match' => array('esas_no' => array('query' => Input::get('esas_no'), "type" => "phrase")),
));
}
if (Input::has('karar_no')) {
array_push($should_array, array(
'match' => array('karar_no' => array('query' => Input::get('karar_no'), "type" => "phrase")),
));
}
if (Input::has('karar_tarih')) {
array_push($should_array, array(
'match' => array('karar_tarih' => array('query' => str_replace('.', '/', Input::get('karar_tarih')), "type" => "phrase")),
));
}
if (Input::has('kurum_id') && Input::get('kurum_id') != "") {
array_push($should_array, array(
'match' => array('kurum_id' => array('query' => Input::get('kurum_id'), "type" => "phrase")),
));
}
if (Input::has('karar_sonuc_tip_id') && Input::get('karar_sonuc_tip_id') != "") {
array_push($should_array, array(
'match' => array('karar_sonuc_tip_id' => Input::get('karar_sonuc_tip_id')),
));
}
if (count($should_array) < 1) {
$sort_array = array("created_at" => array("order" => "desc"));
} else {
$sort_array = array();
}
$params = array(
'index' => 'kararlar',
'type' => 'jdbc',
'body' => array('query' => array(
'bool' => array(
'should' => $should_array,
),
),
"from" => $from,
"size" => $limit,
"sort" => $sort_array,
),
);
return $params;
}
İndex tipi derken neyi kastettiğinizi anlamadım? Arama yapmanız gereken her tablo için ayrı index oluşturmadınız mı?