jjzjj

php - 哪个搜索/标签系统更好?

coder 2023-10-12 原文

我在一个拥有用户和用户生成的文章、画廊和视频的网站上工作。我正在尝试制作一个标记系统并搜索它们。

起初我想在 tbl_articles、tbl_galleries 和 tbl_videos 中我会有标题、描述和标签字段。然后为每个运行如下查询:

select * from tbl_articles where match(title, description, tags)
  against ('$search' in boolean mode) ORDER BY match(title, description, tags)
  against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3

tbl_galleries 和 tbl_videos 的相同查询。对于用户,只需比较用户名。然后使用“更多”按钮(facebook 样式)在结果页面上分别显示三个。

当查看文章、图库或视频时,还会有指向相关内容的链接,因此我考虑仅将 LIMIT 设置为“1,3”来使用相同的查询 - 以避免显示自己。

Q1 - 这个系统怎么样?

我对系统很满意,直到找到 this

他们有

  • 一个“标签”表,其中包含两个 列一个主 ID 和一个唯一的 索引 tag_name。
  • 他们拥有的“类型”表 另一个主 ID 和一个唯一的 索引“类型”(类别)(我认为 我可以用它来 用户/视频/文章/图库)
  • 一个“搜索”表,其中包含 带有外国 id 的文章的 url 来自“标签”和“类型”。 (我想 而不是完整的网址我可以 存储相关的外部 ID,以便 我可以生成网址,例如 article.php?id=....)

Q2 - 这个系统似乎更有效率......但我该如何搜索标题或描述?

Q3 - 另一个坏处是对于每次页面浏览我都必须加入标签..所以它可能不会更有效率。

Q4 - 我的系统也只搜索 bool 值,我用“喜欢”查询会更好吗?

Q5 - 我将我的用户限制为 4 个标签,但我鼓励使用单个词(stackoverflow 风格)...我意识到在我的系统中搜索“火车站”将不匹配像“火车站”这样的标签我该如何解决这个问题?

这么多问题...抱歉这么长。谢谢你。

最佳答案

Q1 - 最好为文章、标签使用三个单独的表,以及一个与文章和标签相关的链接表。您也可以使用两个 articles 表和一个 articles_tags 表来完成。 articles_tags 表将包含一个 articleID 字段和作为复合键的标签本身。两个或三个表可以很容易地找到哪些文章具有给定标签以及哪些标签分配给了给定文章。

Q2 - 标题和描述搜索可以使用带百分比的“like”或正则表达式或全文搜索来完成。

Q3 - 不要担心将标签表与其他表连接起来。套用 Knuth 的话,首先构建它,然后找到瓶颈。 MySQL 非常擅长它的工作。一遍又一遍地把这些 table 拼在一起不会有什么坏处。

Q4 - 这取决于您想从结果中得到什么。通常您需要实际数据,然后您可以测试返回的行数来告诉您它是对还是错。

Q5 - 同样,在将查询传递给数据库之前,您必须在 PHP 端使用“like”语法和一些有创意的正则表达式。

祝你好运!

关于php - 哪个搜索/标签系统更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058016/

有关php - 哪个搜索/标签系统更好?的更多相关文章

  1. ruby - 在院子里用@param 标签警告 - 2

    我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?

  2. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  3. ruby-on-rails - 更好的替代方法 try( :output). try( :data). try( :name)? - 2

    “输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  4. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  5. css - 用 watir 检查标签类? - 2

    我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes

  6. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  9. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

  10. ruby - 如何搜索有用的 ruby - 2

    寻找有用的ruby的好网站是什么? 最佳答案 AgileWebDevelopment列出插件(虽然不是ruby​​gems,我不确定为什么),并允许人们对它们进行评级。RubyToolbox按类别列出gem并比较它们的受欢迎程度。Rubygems有一个搜索框。StackOverflow对最有用的rails插件和ruby​​gems有疑问。 关于ruby-如何搜索有用的ruby,我们在StackOverflow上找到一个类似的问题: https://stacko

随机推荐