【问题标题】:Simple search engine with javascript. Any suggestion?带有 javascript 的简单搜索引擎。有什么建议吗?
【发布时间】:2011-06-06 20:24:00
【问题描述】:

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

你有什么建议吗?

谢谢 .

编辑 - 回答 cmets 的详细信息

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

【问题讨论】:

  • 为什么不用 AJAX 而在服务器端做呢?
  • 需要解析多少个文件?它只是一个文件,还是多个?如果有很多大文件,它可能会很快在网络上变得繁重。
  • 您希望每页搜索一次还是多次? IE。它需要多高的效率?

标签: javascript search-engine


【解决方案1】:

您将在请求中遇到跨浏览器问题,因此使用抽象此请求的库是一个明智的选择。然而,这里是所需调用的可能框架。

请放心,将大文件存储在 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();

【讨论】:

  • 完美,谢谢!我的文件不是很大,所以我想你的建议可以解决问题。
【解决方案2】:

如果我理解正确,您需要自动完成。对于 jQuery,我可以推荐 this one

【讨论】:

    【解决方案3】:

    一些一般性建议:

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

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多