我正在为我的一个项目使用 JavaScript 开发客户端搜索系统,并且在让搜索功能按照人们期望的搜索功能运行时遇到了特别的麻烦。
目前,搜索词在数组中排序q
并循环for
循环(q[i]
当前正在处理的词也是如此),选择它们所属的单词,并且彼此之间也没有任何影响。
这些导致两个问题。
对于第一个问题,搜索intro会返回一篇Introduction文章,如您所料,但类似地搜索con会返回一篇关于Conditions的文章,这并不是真正有用的功能。
第二个更严重的问题是搜索词不会相互影响,因此搜索 会
introduction is important for comedians to setup their jokes
返回“介绍”和“设置”文章,因为这些词在查询中。
循环遍历每个搜索词(在循环每篇文章的循环内)并确定结果优先级的代码片段如下:
rq = new RegExp(q[i], 'gim');
eq = new RegExp("\\b" + escape(q[i]) + "\\b", 'gi');
if (rq.test(title) || rq.test(keywords)) {
match = true;
if (title.match(rq) != null) {
if (title.match(eq) != null) {
priority += (title.match(eq).length * 5)
}
priority += (title.match(rq).length); // Is this wise?
}
if (keywords.match(rq) != null) {
if (keywords.match(eq) != null) {
priority += (keywords.match(eq).length * 3);
}
priority += (keywords.match(rq).length); // Is this wise?
}
}
这些行为在算法决策中是不可避免的,但是我根本想不出更好的方法来做到这一点(而且显然有更好的方法)。也许我只是想多了。