简单的搜索引擎与JavaScript。有什么建议吗?

时间:2011-06-06 10:17:53

标签: javascript search-engine

我想用javascript创建一个简单的搜索引擎。我们的想法是读取服务器端文本文件,解析它并找到与用户查询匹配的任何表达式。 是的,我必须使用客户端脚本。

你有什么建议吗?

由于

编辑 - 回复评论的详细信息

我需要解析1个单个文件(最多10.000行)。我不需要自动完成:我只想在SELECT元素中显示匹配查询的字符串。另外,我想尽可能避免使用JQuery。

3 个答案:

答案 0 :(得分:2)

您的请求会出现跨浏览器问题,因此使用抽象此IS的库是明智的选择。但是,这是所需呼叫的可能骨架。

请放心,将大文件存储在javascript变量中并不是很明显。小心你在做什么!

var words = [];
var query = "";

function parseText(data) {
 // taking care of data
 // check null handle errors
 var data = data.replace(/\W+/g,' '); // replace non words with spaces
 words = data.split(' '); // split and cache this if you need it again without refetching
 doSearch(query);
}

function doSearch(query) {
  // handle the loop trough the array
  // you may save the data into a variable and use regex instead of splitting into an array
}

function handler() {
 if(this.readyState == 4 && this.status == 200) {
  // so far so good
  if(this.responseXML != null && this.responseXML != "")
     // success!
   parseText(this.responseXML);
  else
   parseText(null);
 } else if (this.readyState == 4 && this.status != 200) {
  // fetched the wrong page or network error...
  parseText(null);
 }
}

query = "someword";
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "/remote.txt");
client.send();

答案 1 :(得分:1)

如果我理解正确,您需要自动填充功能。对于jQuery,我可以推荐this one

答案 2 :(得分:0)

一些一般性建议:

  • 如果您不想使用jQuery或类似的库,请使用您选择的(微)库(例如moo.ajax(免责声明:我从未使用过这个,没有保证,yada yada))至少抽象出文本文件的AJAX请求。不要试图自己编写自己的东西,并让它跨浏览器工作。
  • 如果要优化速度,请使用trie或类似结构来跟踪字符串。对于具有合理熵的10,000行(即,不是完全随机的数据),对此的存储器要求有希望不是问题。您可能希望忽略小查询(即少于3个字符或类似内容)。
  • 如果要优化内存使用,只将内存中的字符串列表存储为数组,并使用简单循环和indexOf或正则表达式(请记住/foo/.test(str)str.match(/foo/)!)测试以获取匹配字符串列表。
  • 在select元素上使用innerHTML写入,并使用字符串连接生成<options>。操纵数以千计的DOM元素往往要慢得多。确保HTML转义值,并注意您可能会丢失列表中的选定状态(和滚动位置),以防对您的应用程序很重要。

希望有所帮助!