场景:我正在构建一个基于用户搜索条件将程序员,设计师,商务人士等配对的Web应用程序。
如何根据搜索人员输入的条件返回最相关的搜索结果?
例如:业务用户使用PHP,Angular,MySQL技能搜索程序员。
每个技能都是一个单独的标签(Tag1 = PHP,Tag2 = Angular,标签3 = MySQL),所以每个人都是#34;对象将由这些数据的不同组合组成。
是否有更优雅的方式来查询数据库,而不是在每个技能的人员表中都有一个列,并让查询根据所述技能的存在运行搜索?
我想而不是多列我也可以在人和技能之间建立1:MANY关系,并且仅返回包含所述技能的结果。我觉得这会返回更多的行而不是必要的。
更具体的例子是Stackoverflow如何允许您使用多个标签标记问题...这些标签/问题如何在数据库中搜索和存储?
答案 0 :(得分:0)
您没有提到您正在使用的数据库。如果您的数据库能很好地处理基于数组的搜索(例如,像PostgreSQL那样),那么为了搜索性能原因,这将优于一组固定的列。
现在你可能遇到的一个大问题是同义词。如果有人搜索Postgres而不是PostgreSQL会怎么样?
在我的一个项目中,我们重新调整了PostgreSQL的全文搜索功能。在这种情况下,您可以拥有一个单词数组,这些单词将转换为tsvector,并且使用一组同义词,您可以对拼写,词干,同义词等进行规范化。这是解决此问题的一种方法,但需要一些额外的代码(也许是一个触发器)。