如何解决如何使用Nhibernate进行全文搜索并获得结果排名?
| 我有一个设置了全文索引的SQL 2008 R2数据库,并希望使用NHibernate来获取具有排名的搜索结果。我已经想出了使用FULLTEXTTABLE进行SQL查询以获取结果排名的方法,但是由于该方法未映射到任何表中的实际列,因此我在如何使用NHibernate获取具有排名值的结果方面遇到了困难。 有指针吗?解决方法
(首先,以下语法会有点朦胧,因为这是从内存中获取的,请检查api)
好了,您可以构造一些DTO类并即时映射
例如:
public class Person
{
public virtual String Name {get;set;}
public virtual String Surname {get;set;}
}
正确映射到nhibernate
和
PersonDTO : Person
{
public int FTSRanking {get;set;}
}
没有映射。请注意,我是从类Person
继承的,尽管这不是必需的,而我只是为了简便起见。
此类“ 3”类仅用于查询,但有其局限性,如以下hql所示。
NHSes.CreateQuery(\'select p.Name,p.Surname,p.FTSAlias as FTSRanking from Person p\')
.SetResultTransformer(Transformers.AliasToBean<PersonDTO>())
将返回nhibernate设法汇编的PersonDTO,因为选择列表中的每个项目都与PersonDTO类中的属性(名称,大小写,类型)匹配。另外,您还必须手动键入选择列表,并且由于它不是映射类,因此nhibernate无法汇编集合。
另一种选择是使用Criteria API,在其中设置投影(也可以扩展选择列表)
IList<object[]> results = NHSes.CreateCriteria(typeof(Person))
.Add(Expression.SQL(\" your fts clause here \"))
.SetProjection(Projections.SQL(\" add your fts ranking column here\",),Projections.( here add as a projection the main entity ))
.List<object[]>();
其中在结果变量中,每个返回的行都是一个object [],第一个元素(即results [0] [0])是排名,第二个元素(即results [0] [1])是一个经过妥善管理的Person对象
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。