我正在编写一个网站(使用Entity Framework,MySQL,.net 4,C#),一旦用户找到他想要的东西,每个“产品”都可以有很多类别,子类别可以深达3级具有不同的属性,例如:
“餐厅”可以:平均菜价,儿童菜单 和 “健身房”可以提供:提供游泳池,提供私人教练
我是C#的新手,无法在不使用库Lucene.NET和搜索引擎Solr的情况下弄清楚如何实现至少simliar到分面搜索解决方案,尤其是我将使用的可能是共享托管环境。
想知道是否有人试图在不使用这些技术的情况下实现类似的功能,并且对db结构和代码示例有一些想法......
我是否应该使用Lucene和Solr有没有人知道一些便宜的VPS主机允许安装和使用Solr,也可能会抛出一些教程如何创建这样的分面搜索,因为我找不到任何。
由于
答案 0 :(得分:1)
如this question中所述,关系数据库无法有效地实现分面。 Lucene.NET在进程中运行,因此对于共享托管环境来说它应该不是问题。或者您可以查看一些hosted search solutions。
答案 1 :(得分:0)
子类别可以有效地实施到任何深度。实施Books
,Books>Non-Fiction
和Books>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的回答。