我正在尝试提出最快的搜索建议方法.起初我认为Levenstein UDF函数结合mysql表可以完成这项工作.但是使用levenshtein,mysql必须遍历表中的每一行(大量的单词),这会使查询真的变慢.
现在我最近安装并开始使用Sphinx(http://sphinxsearch.com/)进行全文搜索,主要是因为它的性能和与SphinxSE的紧密mysql集成.
所以我问自己是否可以使用sphinx以某种方式实现"你的意思"算法来提升性能,我想我发现了一个简单的算法.基本上我采取我想要纠正的所有关键字,在每个字母之间放一个空格,然后将它放在sphinx索引中.如果单词是'keyword',它就变成'keywor d'.现在,当用户输入一个单词时,我将其拆分为字母,并在sphinx索引中搜索与所提供的任何字母匹配的记录(我只需要一个).最好的部分是狮身人面像非常适合计算匹配行的相关性(权重),因此最佳匹配总是具有最大权重(我认为).它还会考虑单词(我的情况下的字母)位置,因此最佳匹配将按此顺序排列.
通过sphinx查询,我在关键字列表中得到了最相似的单词.然后我使用扩展的Levenshtain距离检查它,它考虑了重新排列的字母http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance.如果字符串距离小于2(和!= 0),则建议单词.否则不建议任何事情.
我的想法有问题吗?我没想到的东西?任何预期的sphinx查询故障,以及与sphinx相关性计算的怪癖都没有给出最佳匹配?如果我在某处误会,请纠正我.
我正在寻找有关RESTful API设计的建议.我已经阅读了很多关于REST API方案,认证/授权方法等等.我无法决定是否真的需要使用API密钥.根据我的理解,使用API密钥非常有用,如果您想监控使用情况,限制每个应用程序的请求和统计数据.
我想要避免的是必须创建额外的Web界面来添加/管理/删除应用程序以及添加/删除应用程序管理员.也许有一种更简单的方法来进行API密钥分发.或者我真的需要那些吗?我的意思是,监控和限制使用是很酷的,听起来很有用,但是它需要我为密钥分发做的其他事情.
更具体地说,我的网站就像slidehare和scribd.我希望为其功能提供API访问权限,例如添加和管理文档以及获取有关用户的信息.因此,例如,要上传文件,您需要以某种方式进行身份验证并使用特定帐户来执行此操作.在这种情况下,API密钥是一个要求,还是我可以坚持认证用户?
那么您认为处理API密钥的最佳方式是什么?或者我应该使用它们?是否有更聪明的方式来分发(创建,删除)密钥?
提前致谢 :)
我需要创建一个文件共享的对等网络(没有中央服务器)。
我阅读了很多有关该主题的信息。要求是确保网络中的每个对等方都保留其他对等方的完整列表以及网络上所有文件的完整列表。
我知道这不是最好的方法,但是这是一个要求。...(在我看来很奇怪)另一个要求是,对等体之间的通信应使用HTTP协议和JSON序列化实现。
这意味着每个对等方都将充当网络服务器,并且还将有一种方法可以连接到每个其他对等方。
因此,我想知道一种从一个对等方向所有其他对等方传递消息的好方法,而无需让一个对等方直接连接到其他对等方(连接太多)。
我一直在寻找一种以某种方式将消息路由到几个级别的方法,以便使通信量有所分散。据我所知并且可以连接到网络上的任何对等方,我可以在发送消息之前有效地构造一条路由,然后告诉某些对等方重新路由。但是,如何找出最佳路线?如果有一个错误的对等无法重新路由邮件,会发生什么?
编辑:对不起,如果我不清楚。该消息应该由网络上的所有对等方接收,而不仅仅是一个目标。
编辑2:您可以想到我要作为Web服务器网络做的事情。他们应该能够容纳分布式数据(不是问题的一部分),但是每个人都需要知道网络上有哪些可用资源(哈希表)。客户端可以将内容上传到其中一台服务器上(与哪台服务器无关)。发生这种情况时,其他所有人都需要知道此更改以更新其哈希表。如果新服务器加入网络,则同样适用。我的问题是如何在没有单个服务器连接所有其他服务器的情况下传播此消息,这显然会在单个服务器上产生大量流量。
我试图从本地文件创建一个zip文件,并将其直接流式传输到ftp(不先将zip写入磁盘).我没有拉链本身的问题,但似乎ZipArchive类无法识别ftp流包装器.
以下代码是我能想出的最简单的事情,它将说明问题
<?php
$zip = new ZipArchive();
var_dump($zip->open('ftp://[username]:[password]@[hostname.net]/public_html/test.zip', ZipArchive::OVERWRITE));
$zip->addFile(realpath('/input.txt'), 'input.txt');
var_dump($zip->close());
Run Code Online (Sandbox Code Playgroud)
该$zip->open调用返回true时$zip->close返回false.我找不到一种方法来获取错误信息或某些更具体的信息there is an error.问题是我做错了什么,或者我不能用ZipArchive类做这些事情.
我正在制作一个基于AJAX的脚本,jQuery.ajax()并且已经到了我应该以某种方式检查我正在尝试加载的链接是一个html页面还是像SWF,图像或zip那样不同的东西.所以我需要以某种方式检查内容类型标题并决定是否应该获取内容(如果它是html)或抛出ajax调用并执行window.location = theUrl.我不想要的是获取整个文件只是为了找出它是一个100MB的zip文件.
有没有办法在请求仍然继续时"暂停"(或中止)请求并只读取标题?HEADcall不是一个选项,因为这样我每次都要向服务器发出2个请求.
也许某种黑客setTimeout和低级别的xhr函数?
提前致谢!:)
编辑:尝试在请求完成之前从sethrout中的xhr获取头文件,但在获取所有数据之前似乎没有填充它.
编辑2:我在jquery的事情上遇到了困难,它将自己绑定到onreadystatechange:
var xhrr = new window.XMLHttpRequest();
$.ajaxSetup({
xhr: function() { return xhrr }
});
...
$.ajax(....);
var theirfunc = xhrr.onreadystatechange;
xhrr.onreadystatechange = function() {
console.log('xhr state: ', xhrr.readyState);
theirfunc();
};
Run Code Online (Sandbox Code Playgroud)
所以这给了我状态1,2,3,4的顺序,我可以得到内容类型并成功中止.我还在调查当jquery自己创建XMLHttpRequest对象时它为什么不起作用.如果我跳过ajaxSetup部分var xhrr = $.ajax(...)然后以相同的方式绑定它将无法工作.那么我的xhr和jquery有什么不同呢?我看到他们这样做:
function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch( e ) {}
}
Run Code Online (Sandbox Code Playgroud)
所以它不应该有所作为?
编辑3:找到它!jquery 1.6返回一个假的xhr对象只有少量的属性,onreadystatechange而不是其中之一.