Я устал от myqsl-подобного и полнотекстового поиска из-за неподходящих функций поиска, которые мне нужны, и я хочу реализовать sphinx как без условий поиска, так и с термином поиска на моем vps ipage хостинге.
iиметь базу данных с таблицами (1) курс, (2) страна и (3) университет.
Таблица страны имеет столбцы, такие как имя, friendly_name, at, население, президент, флаг, address_of_headquarter, about, Democra__day.Я хочу индексировать только имя и сведения, но не данные о населении, президенте, флаге.
В таблице университетов есть такие столбцы, как name, friendly_name, at, no_of кафедры, Vice_chancellor, staff_strength, фотография, about_university.Я хочу индексировать только name и about_university, но не в no_of кафедре, на рисунке.
Таблица курса имеет столбцы, такие как name, friendly_name, кафедра, school_fee, type_of_degree, currency, pay_after_grad, about_profession.Я хочу индексировать только name и about_profession, pay_after_grad, type_of_degree, school_fee, но в валюте.
require_once('C:/sphinx/api/sphinxapi.php');
$s = new SphinxClient;
$s->setServer("127.0.0.1", 9312); // NOT "localhost" under Windows 7!
$s->SetLimits(0, 25);
$result = $s->Query ("" , "market_shop_product" );
$no=0;
print_r($result['warning']);
if ($result['total'] > 0) {
echo 'Total: ' . $result['total'] . "<br>\n";
echo 'Total Found: ' . $result['total_found'] . "<br>\n";
echo '<table>';
foreach ($result['matches'] as $id => $otherStuff) {
if (isset($search))
{$row = mysqli_fetch_assoc(mysqli_query($con, "SELECT country.*, COUNT(univeristy.country) AS amount FROM country
LEFT JOIN univeristy ON country.id=univeristy.country
LEFT JOIN course ON univeristy.id = course.country
MATCH(country.`name`, country.`address`, country.`about`, country.`country`, country.`city`) AGAINST('{$search}' IN NATURAL LANGUAGE MODE) OR
MATCH(`university`.`university`, `university`.`deal`) AGAINST('{$search}') OR
MATCH(`course`.`name`, `course`.`price`, `course`.`measure`)
AGAINST('{$search}')"));} else {$row = mysqli_fetch_assoc(mysqli_query($con, "SELECT country.*, COUNT(university.country) AS amount FROM country
LEFT JOIN univeristy ON country.id=univeristy.country
LEFT JOIN course ON univeristy.id = course.country
WHERE(country.`country`='{$country}') GROUP by market.id ORDER BY amount DESC
"));}
extract($row);
++ $no;
echo " $name - $country <br>";
}
} else {
echo 'No results found';
}
это для sphinx.conf
sql_query = \
SELECT country.`id`,country.`name`, country.`friendly_url`, country.`address`, country.`country`, country.`city`, country.`about`, country.`state`, university.name, university.about_university, course.about_profession, course.pay_after_grad, course.type_of_degree, course.school_fee, course.name AS cour \
FROM country \
LEFT JOIN university ON country.id = university.country \
LEFT JOIN course ON country.id = course.country
sql_attr_uint = country
SQL
SELECT `university`, CONCAT('is a ', `deal`, ' university') AS sell, `pic`, 'university' AS source, CONCAT(friendly_university, '/{$url}') AS link FROM university WHERE country='{$country}' AND MATCH (`university`, `deal`) AGAINST('{$search}' IN NATURAL LANGUAGE MODE) LIMIT 8
UNION ALL
SELECT `name`, CONCAT( 'average price is ',`currency`, AVG(`price`)) AS priceaverage, `image`, 'course' AS source, CONCAT(friendly_course, 'AT{$url}') AS link FROM course WHERE `country`='{$country}' AND `univeristy`='{$page}' AND MATCH(`name`, `price`, `measure`) AGAINST('{$search}' IN NATURAL LANGUAGE MODE) LIMIT 8
";