【问题标题】:How to provide multiple search functionality in website?如何在网站中提供多种搜索功能?
【发布时间】:2009-02-26 06:54:37
【问题描述】:

我正在开发一个网络应用程序,其中我具有以下类型的搜索功能;

  • 普通搜索:用户输入搜索关键字搜索记录。
  • 流行:这不是一种搜索,它会显示网站上的流行记录,就像 digg 和其他社交书签网站一样。
  • 最近:在此我在我的网站中显示最近添加的记录。
  • 城市搜索:在这里,我向用户显示城市名称,例如“德里”、“孟买”等,当用户单击此链接时,将显示该特定城市的所有记录。
  • 标签搜索:和城市搜索一样,我有标签链接,当用户点击一个标签时,所有标有该标签的记录都会显示给用户。
  • 字母搜索: 与城市和标签相同,此功能还具有诸如“A”、“B”、...等字母的链接,当用户单击任何字母链接时,所有记录都以该链接开头特定的字母将显示给用户

现在,我的问题是我必须向用户提供上面列出的搜索,但我无法决定我将使用一个页面 (result.aspx) 来显示所有搜索记录,并且我'将使用查询字符串计算用户正在使用哪个搜索以及我必须向用户显示哪些数据。例如,假设我正在搜索 city、delhi 和 tag delhi-hotels,那么两者的 url 将是:

对于城市: www.example.com/result.aspx?search_type=city&city_name=delhi

对于标签: www.example.com/result.aspx?search_type=tag&tag_name=delhi-hotels

对于普通搜索: www.example.com/result.aspx?search_type=normal&q=delhi+hotels+and+bar&filter=hotlsOnly

现在,我觉得使用单个页面进行所有搜索的想法很混乱。所以我想到了一些更干净的想法,它为所有类型的搜索使用单独的页面

对于城市: www.example.com/city.aspx?name=delhi

对于标签: www.example.com/tag.aspx?name=delhi-hotels

对于普通搜索: www.example.com/result.aspx?q=delhi+hotels+and+bar&filter=hotlsOnly

最近的: www.example.com/recent.aspx

流行: www.example.com/popular.aspx

我的新想法更简洁,它明确地告诉用户哪个页面是做什么的,它也让他知道他现在在哪里,他现在看到了什么记录。但是这个新想法有一个问题,如果我必须更改搜索结果显示中的任何内容,那么我必须在所有页面中一一进行更改,我认为这个问题的解决方案也是,即在转发器下使用用户控制控件,我会将所有值一一传递给用户控件,以便为每条记录呈现 HTML。

新的想法一切都很好,但我仍然无法决定我必须去哪一个,谁能告诉我你对这个问题的想法。

我想实现一个易于维护、SEO 友好(为我的网站提供良好排名)、用户友好(易于使用和用户理解)的想法

谢谢。

【问题讨论】:

    标签: asp.net logic business-logic


    【解决方案1】:

    在 SEO 方面需要提及的一件事:

    由于许多“结果”页面将链接到相同的内容,因此为这些页面显示不同的 URL 有几个优点:

    1. 如果您在网站上似乎有重复的内容,或者如果有几乎无限的列表的可能性,一些搜索引擎会被交叉。
    2. 分析流量。

    因此,以第 1 点为例,您会注意到 SO 有多种查找问题的方法,包括:

    1. 在主页上
    2. 通过/问题
    3. 通过 /tags
    4. 通过/未回答
    5. 通过 /feeds
    6. 通过/搜索

    如果您查看用于 SO 的 robots.txt,您会发现不允许蜘蛛访问(除其他外):

    Disallow: /tags
    Disallow: /unanswered
    Disallow: /search
    Disallow: /feeds
    Disallow: /questions/tagged
    

    所以搜索引擎应该只找到一个到内容的路径,而不是三四个。

    让他们都通过同一个页面不允许您像这样进行过滤。理想情况下,您希望搜索引擎为城市和标签列表编制索引,但您只需要它为实际详细信息编制一次索引 - 例如从 A 到 Z 列表。

    对于第 2 点,在分析您的网站流量时,如果 URL 有意义并且结果没有隐藏在表单标题中,那么查看人们如何使用您的网站会容易得多 - 许多不错的统计数据包允许您可以报告查询字符串值,或者如果您有“不错的”网址,这会更容易。如果您对此感兴趣,拥有此类信息也将使销售广告变得更容易。

    最后,正如我在 cmets 中对其他回复所提到的,用户可能希望为特定搜索添加书签 - 将查询以一种或另一种方式(查询字符串或重写的 url)烘焙到 URL 中是允许此操作的 simiplist 方式.

    *我说“出现”是因为正如其他人所指出的那样,URL 重写可以实现这一点,而实际上服务器上没有不同的页面。

    【讨论】:

    • 您好,谢谢您的详细解释,我想问几点。 1. SO 是否从单个页面维护其所有搜索(通过根据请求路由它们)?
    • 2.就像在我的网站中一样,我想索引我的城市并标记页面,因为我希望人们能够在搜索引擎中获得特定城市的结果,这样他们就可以直接得到他们想要的东西? (请告诉我我是对还是错??)
    • 最后你觉得根据我的情况,不同的URL页面,还是单一的URL页面,哪个Idea会更好?
    • 请注意:我在共享主机上,所以无法实现 URL 重写,所以我必须使用 .aspx 页面(tag.aspx、city.aspx、popular.aspx 最近.aspx),所以,我必须使用 .aspx 页面:(
    【解决方案2】:

    有几个问题需要解决才能正确回答您的问题:

    1. 在能够处理数据之前,您不一定需要重定向到结果页面。包含提交时搜索接口的页面或控件可以处理提交的搜索参数(和搜索类型)并启动对提供搜索结果的数据库或中间 Web 服务的调用。然后,您可以使用单个结果页面来显示检索到的数据。

    2. 如果您必须通过查询字符串将提交的搜索参数传递给结果页面,那么您最好使用单个结果页面来解析这些参数并有条件地显示结果。

    3. 大多数用户不依赖浏览器地址栏中的 url/querystring 信息来识别他们在网站中的当前位置。您应该有一些更具视觉指示性的东西(例如面包屑控件或标题标签)来指示当前位置。此外,正如您所提到的,可维护性问题在这里非常重要。

    我绝对不会推荐第二种选择(对每种搜索使用单独的结果页面)。如果您担心 SEO,请使用 URL 重写来构建 URL“slugs”以创建更直观的路径。

    【讨论】:

    • 关于第 3 点 - 用户可能会依赖 URL/QS 信息来为一组结果/查询添加书签 - 在 qs 中包含查询详细信息使这成为可能,通过回发来完成会丢失此功能。
    • 你是对的,但这是一种罕见的情况,用户会重复使用相同的参数进行搜索......重复到足以想要为地址添加书签。
    【解决方案3】:

    我会坚持使用原来的 result.aspx 结果页面。从用户的角度来看,我的理由是实际的 URL 本身传达的信息很少。您最好在页面上创建视觉提示,说明“使用标签 Z 在类别 Y 中搜索 X”之类的内容。

    至于编码和维护,因为除了类别之外的所有内容都非常相似,明智的做法是将其保存在一个紧凑的小包中。按照您提出的第二个想法将其分解只会使不需要复杂的事情复杂化。

    【讨论】:

      【解决方案4】:

      放弃查询字符串并使用 URL 重写来处理您的“部分”。从书签/用户可读性的角度来看,搜索引擎优化和清晰。

      城市:www.example.com/city/delhi/

      标签:www.example.com/tag/delhi-hotels/

      最近:www.example.com/recent/

      流行:www.example.com/popular/

      常规搜索可以去 www.example.com/search.aspx 什么的。

      【讨论】:

      • 你能告诉我如何实现这种URL重写,如何将“www.example.com/city/delhi/”指向“www.example.com/result.aspx? search_type=city&city_name=德里"
      • ASP.NET MVC 自带的 Routing 模块也可以在非 MVC 站点上使用:ScottGu 在这里提到:bit.ly/1tl4w
      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 2010-09-07
      • 1970-01-01
      • 2016-10-29
      • 2010-11-18
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多