如何在网站上提供多种搜索功能?

时间:2009-02-26 06:54:38

标签: asp.net logic business-logic

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

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

现在,我的问题是我必须向用户提供上面列出的搜索,但是我无法决定我将使用一个页面(result.aspx)来显示所有搜索记录,而我将使用查询字符串来确定用户正在使用的搜索以及我必须向用户显示的数据。比如,让我说我正在寻找城市,德里和标记德里酒店,那么两者的网址将是:

适用于城市: 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友好(给我的网站排名很好),用户友好(易于使用和了解用户)

感谢。

4 个答案:

答案 0 :(得分:2)

在SEO方面提到一件事:

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

  1. 如果您在网站上看到重复的内容,或者几乎无限列表的可能性,某些搜索引擎会交叉。
  2. 分析交通流量。
  3. 因此,对于第1点,作为一个例子,您会注意到SO有许多方法可以找到问题,包括:

    1. 在主页上
    2. 通过/问题
    3. 通过/ tags
    4. 通过/未答复
    5. 通过/ feed
    6. 通过/搜索
    7. 如果您查看robots.txt上的SO,您会看到蜘蛛不允许访问(除其他外):

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

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

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

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

      最后,正如我在其他回复的评论中所提到的,用户可能希望为特定搜索添加书签 - 将查询以某种方式烘焙到URL中(查询字符串或重写的URL)是允许这样做的simiplist方式

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

答案 1 :(得分:1)

为了正确回答您的问题,需要解决一些问题:

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

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

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

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

答案 2 :(得分:0)

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

至于编码和维护,因为除了类别之外一切都很相似,所以将它保存在一个紧凑的小包装中是明智的。如你提出的第二个想法那样打破它只会使一些不需要复杂的事情复杂化。

答案 3 :(得分:0)

抛弃查询字符串并使用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或其他内容。