用asp.net编写的带有分面搜索的网站
本文关键字:搜索 网站 net asp | 更新日期: 2023-09-27 18:27:00
我正在写一个网站(使用实体框架、MySQL、.net 4、C#),它有很多类别,子类别深入到3个级别。一旦用户找到他想要的东西,每个"产品"都可以有不同的属性,例如:
"餐厅"可以有:平均菜价,儿童菜单可用和"健身房"可以有:游泳池可用,私人教练可用
我是C#的新手,如果不使用库Lucene.NET和搜索引擎Solr,我不知道如何实现至少类似于分面搜索解决方案,尤其是我将使用可能共享的托管环境。
不知道是否有人试图在不使用这些技术的情况下实现类似的功能,并对数据库结构和代码示例有一些想法。。。
此外,如果我必须使用Lucene和Solr,是否有人知道一些廉价的VPS主机,可以安装和使用Solr,也可能会提供一些如何创建这样的分面搜索的教程,因为我找不到任何。
感谢
正如本问题中所解释的,关系数据库无法有效地实现faceting。Lucene.NET在进程中运行,因此对于共享托管环境来说应该不会有问题。或者你可以研究一些托管的搜索解决方案。
子类别可以有效地实现到任何深度。实现对Books
、Books>Non-Fiction
和Books>Non-Fiction>Diet
的分面搜索很简单:请参阅我关于分层分面的问题:如何在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的回答。