多个单词搜索栏

时间:2012-02-27 14:26:39

标签: java php android mysql json

我已经实现了一个包含产品名称,描述,类型等的数据库,我首先实现了一个简单的搜索代码,通过JSON将产品(MySQL上的主键)发送到PHP,在远程服务器上生成查询。所以,现在我想实现一个搜索,用户可以在搜索栏上插入多个单词,查询将返回与单词匹配的所有产品。例如,如果用户搜索“绿色椅子”,我会查询所有产品,这些产品在字段颜色上都有绿色字样,并且在字段产品上有单词chair。任何想法,我如何实现这一点?

使用这样的查询有哪些主要问题:

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

我读到当你使用一个孤独的词时会产生问题这是真的吗?

已解决:我使用这个PHP文件来处理所有事情,感谢所有提示,它们非常有用,我尝试使用lucene更快,特别是对于长n数据库,但不幸的是我无法决定转移到lucen 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();

?>

2 个答案:

答案 0 :(得分:2)

如果要允许全文搜索,则需要实现一些索引。一个简单的fieldname like "%$term%%"不会很高效,Mysql在全文搜索方面不是很擅长。我建议您使用Lucene

答案 1 :(得分:0)

当然这取决于数据库方案,但当然你要维护一些索引表,如'搜索词 - &gt;货物'并在您对货物清单做某事时更新它。当用户为每个键输入两个或多个单词简单查询DB并计算DB答案的交集时。

然后你也可以在索引表中添加另一个字段,显示每个项目的“相似度”,这样你就可以按它排序 - 这样用户就会首先看到“更频繁询问的项目”。