JavaScript搜索算法
JavaScript search algorithm
我正在为我的一个项目开发一个JavaScript客户端搜索系统,在让搜索功能像人们期望的那样运行时遇到了特别的困难。
目前,在数组q
中排序并用for
循环循环的搜索词(因此q[i]
是要处理的当前词)选择它们所属的词,并且彼此之间也没有任何影响。
这导致了两个问题。
-
对于第一个问题,搜索intro会返回Introduction文章,正如您所料,但类似地,搜索con也会返回Conditions的文章,这并不是真正有用的功能。
-
第二个更严重的问题是,搜索词不会相互影响,因此搜索
introduction is important for comedians to setup their jokes
时,会返回查询中的"介绍"answers"设置"文章。
在每个搜索词中循环的代码片段(位于围绕每篇文章循环的循环中)并对结果进行优先级排序,如下所示:
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?
}
}
随着算法决策的做出,这些行为是不可避免的,然而我想不出更好的方法来做到这一点(显然还有更好的方法)。也许我只是想得太多了。
一些观察结果:
(1) "正如你所料,搜索intro会返回Introduction文章,但类似地,搜索condition也会返回一篇关于Conditions的文章,这可能不是用户想要的。"我不明白这里的区别。看起来有两种匹配前缀的情况。此外,后缀/inixion将与简介和条件匹配,至少与rq
正则表达式匹配。
(2) 这里的.match()
返回一个匹配字符串的数组,因为您已经设置了g
修饰符。如果title
是"声音与愤怒",priority += (title.match(rq).length)
给予的priority
是给予愤怒的两倍。我不知道为什么多场比赛应该得到更多的priority
。正如Florent所提到的,你可能想把、和当作停止语,以免这些不重要的单词上的多次匹配淹没了你真正关心的单词的匹配。
(3) 你可能想提供"这个短语中的所有单词,按照这个确切的顺序"、"所有单词,按任何顺序"answers"这些单词中的任何一个"之类的选项。你使用 更新 实现"所有的单词,以任何顺序"都很简单——你可能想得太多了。如果在eq
是正确的,在单词边界匹配。或者,您可能希望明确支持某种词干或通配符语法,例如,intro"与Introduction匹配,但introtitle
或keywords
中找到所有q
,则此代码段将match
设置为true
,否则为false
:var match = true;
for (i = 0; i < q.length; i++) {
eq = new RegExp("''b" + escape(q[i]) + "''b", 'gi');
if (!eq.test(title)) {
match = false;
break;
}
if (!eq.test(keywords)) {
match = false;
break;
}
}
您可以做的第一件事是忽略常用词,如、和、或,a等。
也许关键词应该比标题更重要。
- 用于搜索引擎风格搜索的JavaScript库
- JavaScript搜索算法
- Linkedin是否为公司搜索提供JavaScript API
- 搜索算法
- 在 Django 上下文变量上使用 Javascript 搜索算法
- 用于高效插入和搜索的 Javascript 数据结构
- 二叉搜索树 JavaScript 实现 - 删除函数
- 在变量中搜索值..Javascript
- 优化慢速搜索算法 - javascript,JSON和本地存储
- 从段落中搜索文本 - Javascript
- HTML 页面搜索拦截 (JavaScript)
- 广度优先搜索算法
- 搜索函数javascript提交
- 验证二进制搜索树-JavaScript
- 限制搜索结果Javascript
- 阿尔法贝塔象棋引擎搜索算法没有做出正确的举动
- 谷歌自定义搜索API javascript
- 分流码算法(Javascript),处理负数
- 我如何添加一个完整的网站搜索在Javascript/jQuery网站
- 所需算法:Javascript中可预测的随机贴图