84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
最近要做全文搜索功能,用户输入框输入关键字,可以搜索到匹配该关键字的文章。支持对文章内容匹配和文章标题匹配。想问下实现起来复杂么?有哪些比较好的解决方案?
开发语言php,数据库mysql
小伙看你根骨奇佳,潜力无限,来学PHP伐。
给楼主一个选择方案:http://www.xunsearch.com/site/usercase也是开源的,同时也提供商业服务,如果时间充裕的话,可以考虑自主开发,否则选择开源方案吧,而且社区比较活跃的
sphinx的中文分词版coreseek。http://www.coreseek.cn/
我觉得 elasticsearch 还是不错的,java写的 就是一个搜搜引擎 而且是分布式的 也可以做日志搜索
数据库实现的话可扩展性不高。数据量大起来了,性能会下降。
开源方案有很多,如lucene,需求简单的话写来来也很快。也可以使用基于lucene的solr(http://lucene.apache.org/solr/)
最最最方便,扩展性强的,建议使用阿里与的opensearch,简直太简单方便了。
开源中文搜索引擎XunSearch:http://www.cloud-sun.com/view/producthttp://www.xunsearch.com/doc/php/guide/start.installation1.性能劲爆:XunSearch单库最多支持40亿条数据,在5亿网页大约1.5TB的数据中检索时间不超过1秒(非缓存).2.简单易用:前端是使用脚本语言PHP编写的开发工具包.API简单清晰,开发难度极低,提供全中文的示例代码,文档,辅助脚本工具等.3.功能丰富:除支持基础的自定义分词,字段检索,布尔搜索外,还直接支持用户急需的相关搜索,拼音搜索,搜索建议等专业功能.XunSearch作者同时是中文分词SCWS(提供有PECL扩展和纯PHP实现以及完整中文词典)的作者马明练hightman.http://www.xunsearch.com/scws/index.phpPHP驱动的segmentfault.com的站内搜索用的就是XunSearch.
XunSearch搜索建议和纠错(比如拼音搜索):http://www.xunsearch.com/doc/php/guide/search.fix
或者你可以利用MySQL InnoDB/MyISAM内置的FullText全文索引字段类型,用PECL SCWS对文件内容和标题字段分词后存入一个FullText的分词字段比如article_fc text,FULLTEXT (article_fc),然后用户输入时用PECL SCWS分词后再用MATCH AGAINST语句进行全文搜索:
article_fc text,FULLTEXT (article_fc)
SELECT * FROM articles WHERE MATCH(article_fc) AGAINST('word1 word2');
article_fc字段所在的表也可以和标题正文所在的文章表分开,查出后连接文章表读出标题正文即可.甚至可以用SQLite里建一个分词表,把分词内容都存到SQLite中,减轻MySQL压力.因为SQLite也是支持全文检索的,而且全文检索是一个读操作,SQLite的读性能是非常好的.
更简单粗暴的是,既不依赖PHP SCWS分词,也不依赖MySQL(InnoDB/MyISAM)/SQLite/XunSearch全文检索,直接提示用户分开关键词输入,然后用SQL LIKE进行模糊查询,数据量不大的情况下是可行且简单的方案:
SELECT * FROM articles WHERE content LIKE '%word1%' OR content LIKE '%word2%'; SELECT * FROM articles WHERE content REGEXP 'word1|word2';
Solr,apache的一个项目
给楼主一个选择方案:http://www.xunsearch.com/site/usercase
也是开源的,同时也提供商业服务,如果时间充裕的话,可以考虑自主开发,否则选择开源方案吧,而且社区比较活跃的
sphinx的中文分词版coreseek。
http://www.coreseek.cn/
我觉得 elasticsearch 还是不错的,java写的 就是一个搜搜引擎 而且是分布式的 也可以做日志搜索
数据库实现的话可扩展性不高。数据量大起来了,性能会下降。
开源方案有很多,如lucene,需求简单的话写来来也很快。也可以使用基于lucene的solr(http://lucene.apache.org/solr/)
最最最方便,扩展性强的,建议使用阿里与的opensearch,简直太简单方便了。
开源中文搜索引擎XunSearch:
http://www.cloud-sun.com/view/product
http://www.xunsearch.com/doc/php/guide/start.installation
1.性能劲爆:XunSearch单库最多支持40亿条数据,在5亿网页大约1.5TB的数据中检索时间不超过1秒(非缓存).
2.简单易用:前端是使用脚本语言PHP编写的开发工具包.API简单清晰,开发难度极低,提供全中文的示例代码,文档,辅助脚本工具等.
3.功能丰富:除支持基础的自定义分词,字段检索,布尔搜索外,还直接支持用户急需的相关搜索,拼音搜索,搜索建议等专业功能.
XunSearch作者同时是中文分词SCWS(提供有PECL扩展和纯PHP实现以及完整中文词典)的作者马明练hightman.
http://www.xunsearch.com/scws/index.php
PHP驱动的segmentfault.com的站内搜索用的就是XunSearch.
XunSearch搜索建议和纠错(比如拼音搜索):
http://www.xunsearch.com/doc/php/guide/search.fix
或者你可以利用MySQL InnoDB/MyISAM内置的FullText全文索引字段类型,用PECL SCWS对文件内容和标题字段分词后存入一个FullText的分词字段比如
article_fc text,FULLTEXT (article_fc)
,然后用户输入时用PECL SCWS分词后再用MATCH AGAINST语句进行全文搜索:article_fc字段所在的表也可以和标题正文所在的文章表分开,查出后连接文章表读出标题正文即可.甚至可以用SQLite里建一个分词表,把分词内容都存到SQLite中,减轻MySQL压力.因为SQLite也是支持全文检索的,而且全文检索是一个读操作,SQLite的读性能是非常好的.
更简单粗暴的是,既不依赖PHP SCWS分词,也不依赖MySQL(InnoDB/MyISAM)/SQLite/XunSearch全文检索,直接提示用户分开关键词输入,然后用SQL LIKE进行模糊查询,数据量不大的情况下是可行且简单的方案:
Solr,apache的一个项目