2012-02-27 2 views
1

Я реализовал базу данных с названиями продуктов, описаниями, типами и т. Д., И я сначала реализовал простой код поиска, который отправляет productid (первичный ключ в MySQL) через JSON для PHP, который генерирует запрос на удаленном сервере. поэтому теперь я хочу реализовать поиск, в котором пользователь может вставить больше слова в строку поиска, а запрос возвращает все продукты, соответствующие словам. Например, если пользователь ищет «зеленое кресло», я хочу, чтобы запрос возвращал все продукты, у которых есть слово «зеленый» в цветах полей, и словосочетание на полевом продукте. Любая идея, как мне это реализовать?Панель поиска нескольких слов

каковы основные вопросы, используя запрос, как это:

SELECT * , MATCH() AGAINST ('$search') AS points FROM productstb WHERE MATCH (PRODUCT,DESCRIPTION) AGAINST ('$search') ORDER BY points DESC LIMIT 50 

я прочитал, что он генерирует проблемы, когда вы используете Lonly слово это правда?

решил: Я использовал этот PHP файл, чтобы заботиться обо всем, спасибо за все намеки, они были очень usufull, и я попытался с помощью Lucene быстрее, особенно для длинных баз данных п, но, к сожалению, я не могу принять решение перейти к Люсьен DB

<?php 
mysql_connect("localhost","root","soltux"); 
mysql_select_db("baseDatosMobil"); 

$search = $_POST['precio']; 
$parts=explode(" ", $search); 
$number=count($parts); 

if ($number==1) { 
    $quer="SELECT ARTI,PRESENT,PRECBOL,PROV,CODART FROM PRODFAR WHERE ARTI LIKE '%$busqueda%' LIMIT 10"; 
} 
elseif ($number>1) { 
    $quer= "SELECT ARTI, PRESENT, PROV,CODART, PRECBOL, MATCH (ARTI, PRESENT, PROV) AGAINST ('+$search') AS Score FROM PRODFAR WHERE MATCH (ARTI, PRESENT, PROV) AGAINST ('+$search') ORDER BY Score DESC LIMIT 10"; 

} 
$q=mysql_query($quer); 
while($e=mysql_fetch_assoc($q)){ 
    $e['ARTI']=utf8_encode($e['ARTI']); 
    $e['PRESENT']=utf8_encode($e['PRESENT']); 
    $e['PROV']=utf8_encode($e['PROV']); 
    $output[]=$e; 
} 
print(json_encode($output)); 
mysql_close(); 

?> 

ответ

0

конечно, это зависит от схемы БД, но, конечно, вы хотите сохранить некоторые таблицы индекса, как «поиск по ключевому слову -> товар» и обновить его, когда вы делаете что-то в свой список товаров. Когда пользователь вводит два или более слова простой БД запросов для каждого ключа и вычисляет пересечение ответов БД.

Затем вы можете добавить еще одно поле в индексную таблицу, показывающее «подобие» каждого элемента, поэтому вы сможете отсортировать его - таким образом, пользователи сначала увидят «более часто задаваемые вопросы».

2

Если вы хотите разрешить полнотекстовый поиск, вам нужно реализовать какой-либо индекс. Простой fieldname like "%$term%%" не будет очень результативным, Mysql не очень хорошо подходит для полнотекстового поиска. Я бы рекомендовал использовать для этого Lucene.

+0

или использовать sphinx: http://sphinxsearch.com/ – Stefan

+0

, но проблема в том, что конечный клиент, которому необходимо это решение, которое мне нужно продать позже, использует MySQLm. Также было бы лучше, потому что люцен более открыт –

Смежные вопросы