0

我正在寻找一种更有效的方法来比较值。

这就是我正在做的事情。我解析日志并将值存储在数据库中,每个值大约为 500 个字符。它的基本作用是将错误存储在日志中,因此当我阅读下一封电子邮件时,我会检查错误是否与之前的任何错误相同。如果是我将它们组合在一起。

所以每次我遇到一个独特的错误时,它都会存储在错误表中。每阅读一封新电子邮件,我都会提取错误的 500 个字符,比较它以查看它是否相同或接近(通常为 95%),如果是相同的错误,它会将email_id和存储error id在一个名为 的链接表中error_link。我还在电子邮件表中存储了更多详细信息,但这并不重要。

所以假设我有 5 封电子邮件

电子邮件 1 是error1
电子邮件 2 是error2
电子邮件 3 是error1
电子邮件 4 是error3
电子邮件 5 是error2

在第一个循环中,它将添加error 1到错误表中。

电子邮件 1:在我设置的错误表中error_id=1error_text="error1"。在error_link我设置的表中email_id=1error_id=1

电子邮件 2:在我设置的错误表中error_id=2error_text="error2"。在error_link我设置的表中email_id=2error_id=2

电子邮件 3:在错误表中,我没有做任何事情,因为我找到了与error_id=1. 在error_link我设置的表中email_id=3error_id=1

电子邮件 4:在我设置的错误表中error_id=3error_text="error3"。在error_link我设置的表中email_id=4error_id=3

电子邮件 5:在错误表中,我没有做任何事情,因为我找到了与error_id=2. 在error_link我设置的表中email_id=5error_id=2

我使用的代码从当前电子邮件中获取 500 个字符的片段,然后遍历错误表并运行此脚本:

similar_text($snippet_new_pre, $snippet_text, $similar_percent);

if ($similar_percent > 95)
{
   echo "We have a match";
}

现在的问题是查询非常繁重,尤其是当查询变大时,我有时会得到PHP Fatal error: Maximum execution time of 20 seconds exceeded.

我尝试将其设置为0并有所帮助,但有时会卡住。我不确定是否会发生这种情况,因为整个脚本中包含的时间超过了这个时间,或者它是否是下面 1 个查询的实际代码。

similar_text($snippet_new_pre, $snippet_text, $similar_percent);

它确实指的是那条线,我想知道我是否只是在电子邮件较少时更频繁地进行查询,它会修复它,还是我需要改进实际查询本身并使其更智能?

如果我必须做一个更好的查询而不是减小它比较任何想法的字符的大小,我想只在前 100 个字符上运行查询,如果它有 > 60% 则运行完整的 500 个字符的查询,从而做很多对那些不接近匹配但不确定这是否有帮助的计算较少。

4

0 回答 0