本文发表在 rolia.net 枫下论坛1.我觉得你目前的需求还不明确。你应该先明确定义需求,什么样的记录满足条件,什么不满足。目标不要太高,别想做成“智能”搜索。单复数(JOBS, JOB),动名形容词副词,时态,复合词断词(homebased -> home based ), 这些考虑进去就没法做了,需要语言学家。你目前的定义 "A recored is matched if and only if each words in the record can be found in the keyword set. 应该是可行的。 homebased jobs 不满足你目前的定义。
2. 找个支持全文检索的数据库,把文本导入数据库。用数据库功能帮你匹配。
3.没有全文检索的数据库,大概也可以这么做:
预处理文本文件,找出所有关键字,按字母序存入keywords table:
id keywords
3 home
1 based
2 free
4 jobs
。。。
建另一张表 records:
id keywords_number first_keywords keywords_set text
22222 4 1 [1 2 3 4 ] "home based free jobs"
注意home-based 可以在预处理时断词成 home based:
22223 4 1 [1 2 3 4 ] "home-based free jobs"
在keywords_number 和first_keywords上减索引。
用户输入keywords,先找对应keywords.id, 找不到就肯定没有匹配记录。假如都有,比如 "home based free jobs" -> [1,2,3,4]
如果都有, select * from records where keywords_number<=4 and first_keywords in ( 1,2,3,4)
然后去比较keywords_set . 这样做的话,正常情况几秒钟应该够了。更多精彩文章及讨论,请光临枫下论坛 rolia.net
2. 找个支持全文检索的数据库,把文本导入数据库。用数据库功能帮你匹配。
3.没有全文检索的数据库,大概也可以这么做:
预处理文本文件,找出所有关键字,按字母序存入keywords table:
id keywords
3 home
1 based
2 free
4 jobs
。。。
建另一张表 records:
id keywords_number first_keywords keywords_set text
22222 4 1 [1 2 3 4 ] "home based free jobs"
注意home-based 可以在预处理时断词成 home based:
22223 4 1 [1 2 3 4 ] "home-based free jobs"
在keywords_number 和first_keywords上减索引。
用户输入keywords,先找对应keywords.id, 找不到就肯定没有匹配记录。假如都有,比如 "home based free jobs" -> [1,2,3,4]
如果都有, select * from records where keywords_number<=4 and first_keywords in ( 1,2,3,4)
然后去比较keywords_set . 这样做的话,正常情况几秒钟应该够了。更多精彩文章及讨论,请光临枫下论坛 rolia.net