【问题标题】:Making a Database search engine like Google [closed]制作像谷歌这样的数据库搜索引擎[关闭]
【发布时间】:2014-05-06 02:13:05
【问题描述】:

我是创建网站的新手。我正在创建电话目录搜索引擎。(使用 PostgreSql、CGI 脚本)。我的数据库包含名称、电话号码、城市、州、地址。

到目前为止,我已经创建了一个像“google”这样的搜索字段,我可以在其中提供上述任何数据库条目并进行搜索。但是现在我想给出像“name+city+...”这样我可以最小化输出条目。

【问题讨论】:

  • 怎么知道搜索字符串是name+city还是city+name?似乎您将不得不有一种方法让用户识别她正在输入的字符串类型。

标签: database search-engine


【解决方案1】:

除了Silver Light's answer,您还可以使用PostgreSQL 的multicolumn index 来搜索单个索引中的任何或所有字段。

【讨论】:

    【解决方案2】:

    您的意思是您要搜索所有字段吗?那么:

    SELECT *
    FROM table_name
    WHERE 
    Name LIKE '%query%'
    OR Tel.No LIKE '%query%'
    OR City LIKE '%query%'
    OR State LIKE '%query%'
    OR Address LIKE '%query%'
    

    【讨论】:

    • 是的,其实我用过,但是在搜索中如果我给出“名称+城市”。它如何将名称和城市分开并搜索它们
    • my $Query="select name,telno from tel_dir where name like \'\%$FORM{'name'}\%\' or city like \'\%$FORM{'name' }\%\' 或状态如 \'\%$FORM{'name'}\%\' 或 telno 如 \'\%$FORM{'name'}\%\';";
    • my $Query="select name,telno from tel_dir where name like \'\%$FORM{'name'}\%\' or city like \'\%$FORM{'name' }\%\' 或状态如 \'\%$FORM{'name'}\%\' 或 telno 如 \'\%$FORM{'name'}\%\';";
    【解决方案3】:

    我碰巧不知道您使用的编程语言,但我可以告诉您您可能使用的算法。 它实际上是一个简单的并且包含许多(if-conditions)

    如下:

    if (name is provided) => 带来匹配结果并存储在 Set1 中 if (city is provided) => 过滤 Set1 中的结果并仅获取匹配的结果并将它们存储在 S2 中 if (address is provided) => 过滤 S2 中的结果并仅获取匹配的结果并将它们存储在 S3 ...等中。

    这样你把整套电话记录一个接一个地过滤,直到你把它完全过滤掉,无论用户输入什么都会给他带来一些结果

    我的意思是,如果你输入一个字段,你会得到很多结果,如果你输入两个字段,你会得到更少的结果,因为结果将被过滤两次,如果他输入三个字段,结果将被过滤三次,依此类推...

    简而言之......只需使用过滤 抱歉回答太长了

    【讨论】:

    • 但是他可以给出任何命令,例如“name+state+city”或“city+state”或“Tel.No+city”......
    【解决方案4】:

    您可以创建函数,在检查用户传递了哪些字段来执行搜索查询后,可以动态创建 WHERE 子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多