如何使用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对象     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...