Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复杂搜索解决方案_Php_Mysql_Search_Complexity Theory - Fatal编程技术网

Php 复杂搜索解决方案

Php 复杂搜索解决方案,php,mysql,search,complexity-theory,Php,Mysql,Search,Complexity Theory,首先,这不一定是个问题。。但我真的想知道你对这种“模式”搜索的性能和可能存在的问题的看法 我需要在多个表上创建一个非常复杂的搜索,其中包含大量过滤器、范围和规则。。。我意识到我可以创造这样的东西: 提交搜索表 在内部,我一步一步地运行每个过滤器和逻辑(这可能需要几秒钟) 找到所有匹配记录(我想要的结果)后,我在搜索表上创建一条记录,生成此搜索的标记(基于搜索参数),如86f7e437faa5,并保存所有匹配记录ID 将访问者重定向到mysite.com/search?token=86f7e437

首先,这不一定是个问题。。但我真的想知道你对这种“模式”搜索的性能和可能存在的问题的看法

我需要在多个表上创建一个非常复杂的搜索,其中包含大量过滤器、范围和规则。。。我意识到我可以创造这样的东西:

  • 提交搜索表
  • 在内部,我一步一步地运行每个过滤器和逻辑(这可能需要几秒钟)
  • 找到所有匹配记录(我想要的结果)后,我在
    搜索
    表上创建一条记录,生成此搜索的标记(基于搜索参数),如86f7e437faa5,并保存所有匹配记录ID
  • 将访问者重定向到mysite.com/search?token=86f7e437faa5这样的页面
  • 而且,在结果页面上,我只需要发现我正在谈论的搜索,并对结果ID进行分页(从
    搜索
    表中检索)

    这将大大加快刷新和分页速度,因为我不需要在每个页面视图上运行所有搜索逻辑。如果用户更改了过滤器或搜索条件,我将返回步骤2并生成一个新的搜索令牌

    我从来没有看过这方面的教程,但我认为像BBForum或Invision这样的论坛和搜索有什么关系,对吗?在搜索之后,我被重定向到search.php?id=1231(我在URL或POST参数中没有看到搜索参数)

    此“代币”的使用时间不会超过30分钟~1小时。。因此,“静态搜索”只是出于性能原因


    你觉得这个怎么样?行吗?有什么考虑吗?:)

    对我来说似乎很合乎逻辑

    话虽如此,根据您的应用程序描述,您是否考虑过使用Sphinx。不管有多少表和/或过滤器和/或规则,所有耗时的工作都是在索引中完成的,并且是在事前/幕后完成的。过滤/规则/字段/表都是在事后快速完成的

    因此,与您的情况类似,斯芬克斯可以很快给您一组ID,因为所有的艰苦工作都是预先完成的。

    TiuTalk

    您是否考虑将搜索保存在“搜索”表中?如果是这样,请记住,对于给定的一组参数,基于param生成的令牌将保持不变,并持续时间。如果你的搜索库经常被修改,你不能依赖保存的搜索,因为它可能会返回过时的结果。否则,这似乎是一个很好的解决方案

    我宁愿将令牌基于用户会话。你觉得怎么样


    @g0nc1n

    如果您可以控制服务器(例如在VPS中),Sphinx似乎是一个不错的解决方案


    如果你不这样做,而且简单的全文搜索对你来说还不够,我想这是一个很好的解决方案。但对我来说,它似乎与带缓存的分页搜索没有太大区别。它似乎比带有简单url引用缓存的分页搜索更好。但您仍然存在搜索保持静态的问题。我建议您不时刷新保存的搜索。

    您的系统可能有特殊的令牌,如86f7e437faa5和缓存搜索请求。对于系统效率和可伸缩性来说,这是一种非常有用的机制

    但用户必须根据可用性原则查看所有参数

    因此,在服务器端动态生成参数散列将是一个很好的解决方案。系统检查搜索表中是否存在泛型哈希,如果找到,则返回结果。
    如果没有散列,系统将从基表进行查询,并将新结果保存到搜索表中。

    从默认的sphinx.conf开始,我真正用作资源的是在线文档----及其论坛。由于截止日期,我不会在这个项目中使用sphinx。顺便说一句,这是一个很好的解决方案,我稍后会检查它。不过还是要谢谢你!:)