回答
也许使用mysql的全文特征?
http://devzone.zend.com/26/using-mysql-full-text-searching/
本例使用Zend框架,但SQL是一样的。
如果您的索引/排名需求更复杂,还有一些开源选项可以设置单独的全文搜索服务器。
狮身人面像 http://sphinxsearch.com/
的Xapian http://xapian.org/
你会想拉领域的FULLTEXT指数,使其更快,但你可以做
SELECT *
FROM Table
WHERE MATCH ('column_name') AGAINST ('here is the phrase')
我应该说这个解决方案比@ Brad的解决方案更快,但是如果你想搜索精确的PHRASE,这是错误的解决方案。我想唯一正确的方法是用Brad的一个过滤这个查询得到的结果 – Dan
我有一个数据库已经有各种各样的阶段,如“只要”,“谢谢”,“启动”和其他几千个短语。 。如果用户输入字符串“只要我很忙,我无法启动系统”我应该能够提取“只要”和“启动”它。我想,我无法从数据库中获取每个短语并搜索其在字符串中的出现。这将是非常不够的。有没有办法让用户可以使用输入字符串来查找数据库中的任何短语的出现? –
如果您将经常搜索文本,那么全文将是您最好的选择。另外,我假设你的列是varchar(不是TEXT),否则LIKE不起作用。
你在这里。这将需要所有输入的文本用户,获得独立的话,寻找任何的那些话(全部或部分 - 选择哪个where子句您的Wnt)
让我们假设$ USER_INPUT是从$ _ POST
$user_input = $_POST;
// try this one for sample data $user_input = "hi hello wh'at els;e is new select 1 from dual;";
$user_input_array = array_map('mysql_real_escape_string', explode(' ',$user_input));
$where_clause = "YOURCOL = '".implode("' OR YOURCOL = '", $user_input_array)."'";
echo $where_clause.'<br/>';
// if you want to use IN
$where_clause = " YOURCOL IN ('".implode("', '", $user_input_array)."')";
echo $where_clause.'<br/>';
// if you want to use LIKE
$where_clause = "YOURCOL LIKE '%".implode("%' OR YOURCOL LIKE '%", $user_input_array)."%'";
echo $where_clause.'<br/>';
设置从上面
结果是:
YOURCOL = '喜' OR YOURCOL = '你好' OR YOURCOL = 'WH \' 在 'OR YOURCOL = 'ELS; E' OR YOURCOL = '是' OR YOURCOL ='新'OR YOURCOL ='选择'或YOURCOL ='1'或YOURCOL ='从'或YOURCOL ='双;'; YOURCOL IN('hi','hello','wh'at','els; e','is','new','select','1','from','dual ;')
YOURCOL LIKE'%hi%'or YOURCOL LIKE'%hello%'or YOURCOL LIKE'%wh'at%'or YOURCOL LIKE'%els; e%'or YOURCOL LIKE'%is% '或'YOURCOL LIKE'%new%'或YOURCOL LIKE'%select%'或YOURCOL LIKE'%1%'或YOURCOL LIKE'%'%%或YOURCOL LIKE'%dual;%'
有货MySQL你可以使用
SELECT * from <my_table> WHERE phrase_column LIKE '%my search phrase%'
但它会是一个非常慢的查询,因为它将无法为我们e任何指数。它不支持任何形态。
如果你有大的短语足够的设置,你可以从扩展查询语言在狮身人面像聘请短语的操作来执行词组搜索,但http://sphinxsearch.com/docs/current.html#extended-syntax
描述基本上你可以安装狮身人面像和创建简单的磁盘上的指数,包含的短语你提到的MySQL表。稍后,您可以通过为使用其他整数列索引的每个文档添加评级来增强所需的短语。
你可以找到http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/快速狮身人面像配置指南发射了狮身人面像后,您可以连接到狮身人面像和使用词组搜索:
SELECT * FROM <your_index_name> WHERE MATCH('"my search phase"');
请注意单(串)和双(短语的操作)括号。
狮身人面像将返回短语ID,这样你可以从MySQL非常快速的方式检索它们(它通常选择使用主键)
另一个地方去寻找是http://lucene.apache.org/这是另一个伟大的全文搜索引擎。
- 1. mySQL数据库搜索精确短语
- 2. 使用短语搜索mysql数据库
- 3. mysql短语搜索
- 4. 用短语或单独的关键词搜索mysql数据库
- 5. 在Lucene中搜索短语
- 6. SQL搜索短语数据库aganst正文中的文本
- 7. 在MySQL数据库中简单搜索
- 8. 在mysql数据库中搜索代码
- 9. 在mysql数据库中搜索内容
- 10. 在mySQL数据库中搜索%20
- 11. ElasticSearch在MySql数据库中搜索
- 12. 搜索MySQL数据库
- 13. 搜索MySQL数据库
- 14. php/mysql数据库搜索
- 15. MySQL数据库搜索
- 16. 搜索mysql数据库-php
- 17. 搜索数据库mysql
- 18. PHP搜索mysql数据库
- 19. mysql的搜索数据库
- 20. 在MySQL数据库中搜索多列的特定语法?
- 21. 我需要根据数据库在文本中搜索单词或短语
- 22. 搜索Sphinx中的短语
- 23. 短语搜索和高亮搜索:在Marklogic中搜索
- 24. 如何在Mysql数据库中搜索多个词搜索
- 25. MySQL在数据库中搜索(表搜索)
- 26. PHP,Mysql,在数据库内搜索
- 27. 正在搜索mySQL数据库
- 28. 搜索价格在PHP MySQL数据库
- 29. 在数据库中搜索
- 30. PlayFramework和搜索MySQL数据库中的波斯语单词
我想知道你是否愿意分享你拥有的这个数据库?我问,因为我正在寻找一个两个单词短语的表格(或者我可以放在一张表格中的列表)。我明白如果你不能(而且这个问题很古老),但我只是想我会尝试。 –