1.急求简单流程吧: 1, php把全部文件载入(300首应该不大吧); 2, 按行来读取,并取到名字字符串做比较; 3, 比较成功,返回此行的内容并在web上做展示; 4, html里面搞一个form的提交 比如: <html> <body> <form method="post" action="show.php"> <input type="text" value="请输入唐诗名称" onclick="这里你也可以用ajax来自动完成唐诗名称,做模糊匹配" /> <input type="submit" value="提交" /> </form> </body> </html> 2.关于唐诗检索No.598 郊庙歌辞:郊庙歌辞 享太庙乐章 景云舞 (第13卷) No.3367 张说:唐享太庙乐章 景云舞 (第85卷) No.14429 皇甫澈:赋四相诗 并序 中书令钟绍京 (第313卷) No.25865 李商隐:景阳井 (第541卷) No.28015 温庭筠:照影曲 (第575卷) No.29940 陆龟蒙:添酒中六咏 并序 酒枪 (第620卷) No.30434 司空图:秋景 (第632卷) No.30488 司空图:红茶花 (第633卷) No.32731 唐彦谦:春残 (第672卷) No.33297 韩∥:闲兴 (第681卷) No.33402 韩∥:永明禅师房 (第682卷) No.35299 钱?:江行无题一百首 60 (第712卷) No.36600 陈贶:景阳台怀古 (第741卷) No.38785 孙氏:白蜡烛诗 (第799卷) No.40210 栖白:寿昌节赋得红云表夏曰 (第823卷) No.43353 孙光宪:后庭花 (第897卷) 3.如何使用PHP实现全文检索功能1、新建数据表: CREATE TABLE fulltext_sample(copy TEXT,FULLTEXT(copy)) TYPE=MyISAM; 这里的copy就是一个fulltext类型的字段,如果建表的时候没有添加全文检索字段,也可以通过alert来添加,如: ALTER TABLE fulltext_sample ADD FULLTEXT(copy)2、插入数据: INSERT INTO fulltext_sample VALUES ('It appears good from here'), ('The here and the past'), ('Why are we hear'), ('An all-out alert'), ('All you need is love'), ('A good alert');3、数据检索: SELECT * FROM fulltext_sample WHERE MATCH(copy) AGAINST('love'); 上面就是mysql的全文检索功能,注意:在全文索引上进行搜索是不区分大小写的。 下面再看如何实现中文全文检索。 fulltext字段是以词语为单位,词语之间需要用空格隔开,而汉语的句子中各个词语之间并不会用空格隔开,因此我们需要对中文进行分词,这也就是为什么上面需要强词用到中文分词扩展模块。 但是尽管对中文进行分词,MYSQL还是不能通过MATCH来实现中文的全文检索,这需要通过一定的方法来进行转换,一个比较简单实用的方法是采用下面这个函数(当然还有更好的),它将中文进行了urlencode转换。 function q_encode($str) { $data = array_filter(explode(" ",$str)); $data = array_flip(array_flip($data)); foreach ($data as $ss) { if (strlen($ss)>1 ) $data_code .= str_replace("%","",urlencode($ss)) . " "; } $data_code = trim($data_code); return $data_code; } 将转换过后的内容保存至事先定义好的fulltext字段。 同样,在查询的时候也需要将查询的关键词进行同样方法的转换。 4.php全文检索的方案有几个SELECT * FROM `tablename` WHERE `textfield` LIKE BINARY '%"。 $keyword。"%' ORDER BY `datefield` 首先“全文检索”的速度本身就是是很快的,你测试一下就知道了 其次,将内容转换成拼音只是在插入数据或修改数据时做一次。 所花费的时间对“查询”来讲是可忽略不计的 只是得增加不少存储空间 转换成拼音也不是很好的办法,只是不得已而为之。 “汉字”——“han4 zi4” 这样在“全文检索”时会将包含“汉”或“字”的记录都检索出来,显然并不符合要求,所以还需要用程序“过滤”一下。 使用“分词”技术简单的说来就是把数据(中文)按两个字一组截断 “全文检索”——“全文”、“文检”、“检索” 把得到的字组合与文章的id一同保存在一张表里 由于检索时可利用索引所以是很快的 请所有关心“全文检索”的朋友注意:“全文检索”是有一套完整的表述语法的,如果你自行开发“全文检索”功能。 就需要自行实现他的语法,否则人家是不能高效的检索到所需资料的。 |