Symfony 3.4项目。如何添加搜索功能?
我正在开发一个Symfony 3.4项目。它由几个捆绑包组成:一个非常简单的博客(博客/帖子/评论实体)、网页(页面/内容)和一些显示时间线的东西(时间线/事件)。现在我想添加一个搜索按钮和一种让用户从所有这些实体查询底层数据的方法 让我用一个非常简单的场景来解释我自己。用户搜索“goofy”,并说“goofy”出现在几个帖子记录(在“消息”和“标题”字段中)、几个事件记录(“描述”字段)和几个内容记录(…)中。我需要返回不同视图的链接列表,比如blog/post/1/show,…,page/content/27/show,…,timeline/event/19/show 我想我可以通过简单的php+sql来实现这一点。问题是,是否有准备就绪的东西,以便我只需要配置它 否则,我应该为我的数据编制索引吗 为了索引数据,我看到了Algolia的建议,但对于我的简单项目来说,这似乎是一个沉重的解决方案。(另外,我知道Algolia不是我可以运行服务器的东西,不是吗?)Symfony 3.4项目。如何添加搜索功能?,symfony,elasticsearch,Symfony,elasticsearch,我正在开发一个Symfony 3.4项目。它由几个捆绑包组成:一个非常简单的博客(博客/帖子/评论实体)、网页(页面/内容)和一些显示时间线的东西(时间线/事件)。现在我想添加一个搜索按钮和一种让用户从所有这些实体查询底层数据的方法 让我用一个非常简单的场景来解释我自己。用户搜索“goofy”,并说“goofy”出现在几个帖子记录(在“消息”和“标题”字段中)、几个事件记录(“描述”字段)和几个内容记录(…)中。我需要返回不同视图的链接列表,比如blog/post/1/show,…,page/c
我也看到了(和),但我不确定它是否仍在更新中。而且,它似乎有一些 对于这样一个没有很多搜索维度和任何特定要求的简单项目,我只需要使用一个简单的Symfony表单,直接查询数据库 一个完整的搜索/索引服务将是一个彻底的滥杀滥伤。 当然,除非你想利用这个项目作为学习这些技术的机会
编辑: 一种简单的方法是连接所有要查询的表,对所有要检查的文本字段执行类似“%myfilter%”的操作,检索实体的id,将其传递给twig,然后在循环中获取实体的视图控制器的路径,将id参数传递给它。 如果您的模式很简单,并且您的记录相对较少,那么这应该可以很好地工作。 在这种情况下,我会坚持使用LIKE并避免使用全文索引(…WHERE MATCH(content)on…),因为mysql在使用连接的复杂查询中将此类索引与其他索引组合时非常慢 一种稍微复杂一点的方法是使用侦听器或doctrine上的某个东西在一个单独的表上维护每个实体的序列化全文表示,然后您可以直接查询该表,从而避免可能复杂的联接及其开销。在这种情况下,还可以更安全地查询全文索引
这也可能为更轻松地切换到不同的索引器/搜索引擎开辟道路(到时候),因为您已经做了一些工作,将搜索/索引从实际模型的结构中分离出来。对于这样一个简单的项目,没有太多搜索维度,也没有任何特定要求,我只需要使用一个简单的Symfony表单,直接查询数据库 一个完整的搜索/索引服务将是一个彻底的滥杀滥伤。 当然,除非你想利用这个项目作为学习这些技术的机会
编辑: 一种简单的方法是连接所有要查询的表,对所有要检查的文本字段执行类似“%myfilter%”的操作,检索实体的id,将其传递给twig,然后在循环中获取实体的视图控制器的路径,将id参数传递给它。 如果您的模式很简单,并且您的记录相对较少,那么这应该可以很好地工作。 在这种情况下,我会坚持使用LIKE并避免使用全文索引(…WHERE MATCH(content)on…),因为mysql在使用连接的复杂查询中将此类索引与其他索引组合时非常慢 一种稍微复杂一点的方法是使用侦听器或doctrine上的某个东西在一个单独的表上维护每个实体的序列化全文表示,然后您可以直接查询该表,从而避免可能复杂的联接及其开销。在这种情况下,还可以更安全地查询全文索引
这也可能为更轻松地切换到不同的索引器/搜索引擎(到时候)开辟了道路,因为您已经做了一些工作,将搜索/索引与实际模型的结构分离。使用简单的form@Albeis,是的,我编辑是为了更好地解释自己。我相信,在某种程度上,Algolia有一个自由选择,这是完美的小,小项目。然而,我的建议是,使用您自己的简单搜索,因为您可能不会拥有大量数据,因此不需要在外部对其进行索引。当你对你的项目感到满意并决定对它进行一点扩展,然后尝试Algolia,不管怎样,它都很容易实现form@Albeis,是的,我编辑是为了更好地解释我自己。我相信,在某种程度上,Algolia有一个免费的选择,它非常适合小型项目。然而,我的建议是,使用您自己的简单搜索,因为您可能不会拥有大量数据,因此不需要在外部对其进行索引。当你对你的项目感到满意,并决定对它进行一点扩展,然后尝试Algolia,不管怎样,它都相当容易实现。是的,很有可能。请参见编辑。很高兴您能详细介绍一下如何“直接查询”。我添加了一些更详细的简单方法。检查我的编辑上面。如果你需要更多帮助,请告诉我:)@Dimitris thks非常感谢。我将尝试序列化全文表示方法,我的新作业,然后回来。你知道什么好的教程吗?这应该是直截了当的。您最大的挑战将是决定如何序列化实体(可能是json)。查看symfony和jms序列化程序教程。然后,我将创建事件(new/update/delete)和侦听器,并在每次对实体进行更改时发送它们。避免使用条令生命周期事件和侦听器。它们不能很好地与潮水一起工作。然后应该使用本机sql进行搜索。这样您就可以进行全文查询