文章出处:我的博客 我的生活
jforum是基于英语系的(尤其在全文检索的时候-当然可以采用Lucene加以改造-正在研究中...)。
在安装jforum2.1.6的过程中遇到几个问题,记录下来以做备份之用。
1、和WEB-INF同一层次,缺少tmp文件夹。如果没有的话,发表贴子,附件不能正常发布。
2、中文检索的时候出现问题(必须贴子主题或内容超过3个字才可以)。可以查看net.jforum.dao.generic.GenericSearchIn­dexerDAO类中insertSearchWords(List
posts)方法,在post的时候会往表jforum_search_words和jforum_search_wordmatch中插入检索的关键词语。i­nt
minWordSize =
SystemGlobals.getIntValue(ConfigKeys.SEARCH_MIN_WORD_SIZE);int
maxWordSize =
SystemGlobals.getIntValue(ConfigKeys.SEARCH_MAX_WORD_SIZE);分别设置了关键词的最大和最 小长度­(英语一般都会超过三个字母,所以最小值为三:可以在SystemGlobals.properties中配置 search.min.word.size
= 3 search.max.word.size = 100)
所以如果作为中文论坛的话,一当少于3个字,会抛出java.lang.StringIndexOutOfBoundsException:
String index out of range:
-1的异常,自然上面提到的两张表中不会插入检索数据。一种比较笨的方式是设置search.min.word.size = 1,可以实现,不过效率随着论坛量的增加会明显降低。
net.jforum.dao.generic.GenericSearchDAO类中topicsByKeyword(SearchData
sd)方法:有这样的语句:boolean isLike =
"like".equals(SystemGlobals.getValue(ConfigKeys.SEARCH_WORD_MATCHING).trim (­));,也是在SystemGlobals.properties中配置,默认为search.word.matching
= equals。
就是默认采用非like的方式检索数据库,这样在海量数据的时候会大大提高检索效率,因为英语是用空格分隔单词的,所以这种方式可以比较好的解决 ­检索问题。对于中文来说,这样检索的话无法实现正常的使用功能,一种简便的方式就是更改配置文件:如 search.word.matching
= like,使用like的方式工作。对于一般的小型应用足以对付。对于海量数据,效率是相当差的,一种可以采用数据库提供的搜索引擎来弥补,还有的就是文前提到­的采用Lucene来实现全文搜索。
以上只是一些个人的看法,希望得到指正。
jforum是基于英语系的(尤其在全文检索的时候-当然可以采用Lucene加以改造-正在研究中...)。
在安装jforum2.1.6的过程中遇到几个问题,记录下来以做备份之用。
1、和WEB-INF同一层次,缺少tmp文件夹。如果没有的话,发表贴子,附件不能正常发布。
2、中文检索的时候出现问题(必须贴子主题或内容超过3个字才可以)。可以查看net.jforum.dao.generic.GenericSearchIn­dexerDAO类中insertSearchWords(List
posts)方法,在post的时候会往表jforum_search_words和jforum_search_wordmatch中插入检索的关键词语。i­nt
minWordSize =
SystemGlobals.getIntValue(ConfigKeys.SEARCH_MIN_WORD_SIZE);int
maxWordSize =
SystemGlobals.getIntValue(ConfigKeys.SEARCH_MAX_WORD_SIZE);分别设置了关键词的最大和最 小长度­(英语一般都会超过三个字母,所以最小值为三:可以在SystemGlobals.properties中配置 search.min.word.size
= 3 search.max.word.size = 100)
所以如果作为中文论坛的话,一当少于3个字,会抛出java.lang.StringIndexOutOfBoundsException:
String index out of range:
-1的异常,自然上面提到的两张表中不会插入检索数据。一种比较笨的方式是设置search.min.word.size = 1,可以实现,不过效率随着论坛量的增加会明显降低。
net.jforum.dao.generic.GenericSearchDAO类中topicsByKeyword(SearchData
sd)方法:有这样的语句:boolean isLike =
"like".equals(SystemGlobals.getValue(ConfigKeys.SEARCH_WORD_MATCHING).trim (­));,也是在SystemGlobals.properties中配置,默认为search.word.matching
= equals。
就是默认采用非like的方式检索数据库,这样在海量数据的时候会大大提高检索效率,因为英语是用空格分隔单词的,所以这种方式可以比较好的解决 ­检索问题。对于中文来说,这样检索的话无法实现正常的使用功能,一种简便的方式就是更改配置文件:如 search.word.matching
= like,使用like的方式工作。对于一般的小型应用足以对付。对于海量数据,效率是相当差的,一种可以采用数据库提供的搜索引擎来弥补,还有的就是文前提到­的采用Lucene来实现全文搜索。
以上只是一些个人的看法,希望得到指正。