java - 多词搜索栏

标签 java php android mysql json

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

使用这样的查询的主要问题是什么:

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

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

已解决:我使用这个 PHP 文件来处理所有事情,感谢所有提示,它们非常有用,我还尝试使用 lucene 更快,尤其是对于 long 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();

?>

最佳答案

如果你想允许全文搜索,你需要实现一些索引。一个简单的fieldname like "%$term%%" 不会有很好的性能,Mysql 不太擅长全文搜索。我建议使用 Lucene为此。

关于java - 多词搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9466637/

相关文章:

java - 是否可以从我的应用程序中阻止电话?手机是否有一些可以访问的 ID?

php - 来自计数查询的 ID

javascript - WordPress 自定义主题 : mixing php and javaScript?

javascript - 我上传图像的 Javascript 和 PHP 通信有什么问题?

android - Ant Build AAPT Crunch 正在从库资源图像中剥离 draw9 信息

java - 运行测试时页面对象模型看到空指针异常?

java - 使用 JFileChooser 上传多个图像

java - 如何检查java应用程序发送的邮件是否已读?

c# - Unity播放视频报错 `PlayVideo.audio'隐藏继承成员 `UnityEngine.Component.audio'。如果打算隐藏,请使用 new 关键字

android - 关于外部 Jar -- android-support-v13.jar 的一些问题