일부 게시물 데이터가 있으며이 게시물의 제목을 검색하기 위해 elasticsearch를 사용합니다. 그런 다음 필터를 사용하여 범주 ID 및 기타 매개 변수를 기반으로 결과를 필터링합니다. 내가하려는 것은 쿼리 기준과 일치하는 모든 범주의 게시물을 가져 와서 필터를 무시하는 것입니다.쿼리에만 기반한 패싯 처리 된 결과 얻기
여기까지 제가 한 것입니다.
if (! empty($search))
{
$query['multi_match'] = array(
'query' => $search,
'fields' => array('title', 'title_en')
);
}
은 그럼 어떤 필터를 적용 :이 쿼리 부분입니다
if (! empty($loc))
{
$filter['bool']['must'][]['geo_distance'] = array(
'distance' => $distance . 'meters',
'loc' => $loc
);
}
if (isset($category))
{
$filter['bool']['must'][]['terms'] = array(
'categories' => $category
);
}
그리고 내가 패싯 부분 :
$facets = array(
'categories' => array(
'terms' => array(
'field' => 'categories'
)
)
);
과 마지막 부분 :
$searchParams['body']['query']['filtered'] = array(
'query' => $query,
'filter' => $filter,
);
$searchParams['body']['facets'] = $facets;
문제는 내가를 적용 할 때입니다.또는 다른 필터를 사용하면 패싯에서 반환하는 값에 영향을줍니다. 패싯이 쿼리의 영향을 받기를 원하므로 $search
변수가 100 개의 결과를 반환하고 지리적 거리가 10으로 줄어들면 패싯은 100 개의 결과에서 모든 범주를 반환해야하며 그렇지 않으면 10을 반환해야합니다. elasticsearch를 사용하여 가능한가요?
그게 전부입니다! 감사! –