用asp.net编写的带有分面搜索的网站

本文关键字:搜索 网站 net asp | 更新日期: 2023-09-27 18:27:00

我正在写一个网站(使用实体框架、MySQL、.net 4、C#),它有很多类别,子类别深入到3个级别。一旦用户找到他想要的东西,每个"产品"都可以有不同的属性,例如:

"餐厅"可以有:平均菜价,儿童菜单可用和"健身房"可以有:游泳池可用,私人教练可用

我是C#的新手,如果不使用库Lucene.NET和搜索引擎Solr,我不知道如何实现至少类似于分面搜索解决方案,尤其是我将使用可能共享的托管环境。

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

此外,如果我必须使用Lucene和Solr,是否有人知道一些廉价的VPS主机,可以安装和使用Solr,也可能会提供一些如何创建这样的分面搜索的教程,因为我找不到任何。

感谢

用asp.net编写的带有分面搜索的网站

正如本问题中所解释的,关系数据库无法有效地实现faceting。Lucene.NET在进程中运行,因此对于共享托管环境来说应该不会有问题。或者你可以研究一些托管的搜索解决方案。

子类别可以有效地实现到任何深度。实现对BooksBooks>Non-FictionBooks>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的回答。