有个问题困扰我好久了,自己不知道该怎么办,上来请教大家。我用mysql存储许多文章,utf8格式,文章主体内容用text数据类型存储,但是utf8的text只能存储23000个汉字左右,虽然一般的文章也够用了,但总有些文章是大于这个字节的,难道要分开存储?那样程序会比较麻烦。或者用mediumtext等更大的数据类型?这样去搜索全文的时候会不会慢很多呢?因为我的这些文章都是需要全文检索的。(或者干脆存储在硬盘上?可是那样搜索起来更麻烦。)请问大家我这种情况该怎么办才好呢?多谢!

解决方案 »

  1.   

     LONGTEXT总够了吧
    存储可以在库里  全文搜索还是不要用数据库搞了
      

  2.   

    用InnoDB类型不是搜索很快吗?我全文搜索也不是所有的文章,而是挑出来的某些文章,一般也就几十篇或几百篇、上千篇,请问到底要怎么解决才好呢?我对效率问题不太了解,请多指教!
      

  3.   

    楼主用coreseek 这个来做全文索引.不区分存储引擎;那可是相当的速度;
      

  4.   

    文章里面的关键字搜索还是?要是不是这样的话,干嘛不加个标题字段,那个可以用 =或则like 了
      

  5.   

    我搜索就是针对某一类文章,一般不会很多,最多也就几千篇吧,但总的文章可能有几百万篇的。就是说我先将某些文章的ID揪出来,然后再根据这些ID去数据库中搜索其文章的具体内容。没有什么特定的关键字,因为用户有可能使用任何关键字进行搜索,而且不仅仅是搜索标题,而是要搜索全文的文章内容。我搜索的情况基本就是这样,我对效率问题也不是很懂,请教大家我这种情况应该怎么解决才好呢?
      

  6.   

    用第3方插件做搜索吧,如 coreseek.
      

  7.   

    请问ls大侠说的全文搜索是不是就是我现在用的直接在数据库中搜索?总量十几二十万篇文章,具体搜索对象几百篇或几千篇文章——我这样的情况直接在数据库里搜索,能支持多少在线人数呢?我目前是直接搜索的,看看我的搜索语句:$Sql = "select SQL_CALC_FOUND_ROWS a.*, b.Language as BLanguage, b.ClassId as BClassId, b.OLState as BState from ".$bodyTable." a, ".$mainTable." b where 1=1 and b.AuthorId='$getAuthorId'".$searchSql.$SqlLan.$SqlCls." and a.Pass='Y' and a.TowerId = b.Id limit ".$startpage.",$psize";
      

  8.   

    $Sql = "select SQL_CALC_FOUND_ROWS a.*, b.Language as BLanguage, b.ClassId as BClassId, b.OLState as BState from ".$bodyTable." a, ".$mainTable." b 
    where 1=1 and b.AuthorId='$getAuthorId'".$searchSql.$SqlLan.$SqlCls." and a.Pass='Y' and a.TowerId = b.Id limit ".$startpage.",$psize";