Php 在多个具有优先级的表中搜索
我可以使用一些关于开发以下搜索脚本的最佳方法的输入:Php 在多个具有优先级的表中搜索,php,mysql,sql,search,full-text-search,Php,Mysql,Sql,Search,Full Text Search,我可以使用一些关于开发以下搜索脚本的最佳方法的输入: 客户端获得了一个包含多个表(wiki、博客、文章等)的数据库 维基和博客有一个单独的带有标签的表格 如果用户搜索某个(或多个)关键字,脚本首先必须检查这些标记是否完全匹配(wiki优先于博客)。这些匹配项应首先显示在结果中 然后它必须检查标题是否匹配(wiki优先于博客,博客优先于文章等)。最后一步是检查表内容的相关性 目前,我们只是在表格上进行全文搜索,并为标题设置一个优先级因子,但这并没有考虑1)标记的优先级2)wiki相对于博客文章
- 客户端获得了一个包含多个表(wiki、博客、文章等)的数据库
- 维基和博客有一个单独的带有标签的表格
有没有有效的方法来解决这个问题 在我的脑海中,有几个起点: 链接查询 最简单的解决方案是只进行大量查询(匹配wiki标记,然后匹配博客标记,然后匹配wiki标题,然后匹配博客标题,…),但这可能不是很有效 根据您的表结构,您可以通过使用语句将所有内容混合到一个查询中并对其进行排序来加快速度,但我认为这在代码中看起来非常糟糕 建立搜索索引 如果你想要的只是一个完整的单词匹配(所以“和”匹配“在这里和那里”,但不是“在我手里”),你也可以建立自己的搜索索引 在其最简单的形式中,这将是另一个表,例如,包含以下列:
- 关键字:这显然应该是一个索引(但不是唯一的索引)并保存搜索项
- 源类型:这表示这是什么类型的内容(博客文章、wiki页面等),它可以是字符串或整数(这将使排序更容易)
- 源ID:这是相应内容表中的主键,例如die blog article ID或wiki页面ID
- 匹配类型:指示关键字出现的位置,例如0=标记,1=标题,2=内容
当然,这需要设置很多(需要一个完整的Java环境、一个占用内存的应用服务器和一个PHP扩展),也需要学习很多东西,但这是一个功能强大的解决方案,具有最佳的可扩展性。你不知道这是哪种应用。
如果是一个web应用程序,异步向服务器发送不同的查询可能是一个简单的解决方案。首先发送最重要的查询,它们很可能也是最快的查询。当数据返回时更新显示的结果
缺点是结果集重叠。按ID过滤不是问题,但服务器发回的数据太多。只有你才能知道这有多重要。你的问题的答案可能是“是”。您能否显示当前用于全文搜索的查询?非常感谢您的建议。Lucene选项可能是未来的一个好选项。我想我们会选择搜索索引表。再次感谢。