用asp.net进行分面搜索的网站

时间:2012-03-06 16:51:33

标签: c# entity-framework-4 solr lucene faceted-search

我正在编写一个网站(使用Entity Framework,MySQL,.net 4,C#),一旦用户找到他想要的东西,每个“产品”都可以有很多类别,子类别可以深达3级具有不同的属性,例如:

“餐厅”可以:平均菜价,儿童菜单 和 “健身房”可以提供:提供游泳池,提供私人教练

我是C#的新手,无法在不使用库Lucene.NET和搜索引擎Solr的情况下弄清楚如何实现至少simliar到分面搜索解决方案,尤其是我将使用的可能是共享托管环境。

想知道是否有人试图在不使用这些技术的情况下实现类似的功能,并且对db结构和代码示例有一些想法......

我是否应该使用Lucene和Solr有没有人知道一些便宜的VPS主机允许安装和使用Solr,也可能会抛出一些教程如何创建这样的分面搜索,因为我找不到任何。

由于

2 个答案:

答案 0 :(得分:1)

this question中所述,关系数据库无法有效地实现分面。 Lucene.NET在进程中运行,因此对于共享托管环境来说它应该不是问题。或者您可以查看一些hosted search solutions

答案 1 :(得分:0)

子类别可以有效地实施到任何深度。实施BooksBooks>Non-FictionBooks>Non-Fiction>Diet的分面搜索非常简单:请参阅我关于分层分面的问题:Ways to do hierarchial faceting in Solr?


动态字段是您向实体添加属性的朋友。修改schema.xml

<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>
<dynamicField name="*_t"  type="text"    indexed="true"  stored="true"/>
//you may need a multi-valued string type if you want faceting

所以你可以简单地添加一个文件:

restaurant_average_dish_price_i: 123
restaurant_kids_menu_available_s:"yes"

第一个字段为int,准备进行比较操作,第二个字段成为字符串,准备进行分面。

http://www.tnrglobal.com/blog/2010/07/dynamic-fields-in-apache-solr/

http://wiki.apache.org/solr/SchemaXml#Dynamic_fields


关于部署选项,请遵循Mauricio Scheffer的回答。