为CONTAINSTABLE写ICriteria(sql全文搜索)

Omu*_*Omu 4 sql-server nhibernate full-text-search criteria fluent-nhibernate

我需要对多个表进行全文搜索,所以我使用SqlServer CONTAINSTABLE函数,它可以作为SQL查询正常工作,但是如何将CONTAINSTABLE重写为NHibernate ICriteria.

SELECT DISTINCT CP.* FROM ContentPack CP
    INNER JOIN [Content] C ON CP.ContentPackId = C.ContentPackId

 INNER JOIN
     CONTAINSTABLE([Content], (Title, [Description]), 'Foo*') AS KEY_TBL
     ON C.Title = KEY_TBL.[KEY]
Run Code Online (Sandbox Code Playgroud)

我需要将此SQL转换为NHibernate Criteria,有人可以帮助我吗?

Ana*_*and 5

同样的问题,我也得到了

NHibernate + SqlServer全文搜索

我没有得到任何解决方案所以我去了拦截器概念在哪里

1)我为主表创建了分离标准并加入了全文表

2)还为nhibernate创建了一个自定义拦截器,用于替换全文表名 (select [key] as foreignkey,[rank] as rank FROM CONTAINSTABLE(full_text,full_text_col , 'Foo*'))

生成的查询

SELECT c.id,
        c.name,
        ft.id, 
        ft.rank 
FROM candidates c 
    INNER JOIN full_text ft ON ft.id  = c.fulltext_id 
ORDER BY rank
Run Code Online (Sandbox Code Playgroud)

拦截后查询

SELECT c.id,
        c.name,
        ft.id,
        ft.rank 
FROM candidates c 
    INNER JOIN (
            SELECT [KEY] AS id ,[rank] AS rank 
            FROM CONTAINSTABLE(full_text, full_text_col, 'Foo*')
               ) AS ft ON ft.id  = c.fulltext_id 
ORDER BY rank
Run Code Online (Sandbox Code Playgroud)

****DetachedCriteria****

        DetachedCriteria candidateCriteria = DetachedCriteria.For<Candidate>();
        DetachedCriteria fullTextCriteria = candidateCriteria.CreateCriteria("FullText");  
Run Code Online (Sandbox Code Playgroud)

拦截器代码

public interface CustomInterceptor : IInterceptor, EmptyInterceptor
{
    private string fulltextString;
    public string FulltextString
    {
        get { return fulltextString; }
        set { fulltextString = value; }
    }
    SqlString IInterceptor.OnPrepareStatement(SqlString sql)
    {
        string query = sql.ToString();
        if (query.Contains("full_text"))
        {
            sql = sql.Replace("full_text", "(select [key] as foreignkey,[rank] as Rank FROM CONTAINSTABLE(full_text, full_text_col, '"+FulltextString+"')) AS ft'");
        }
        return sql;
    }
}
Run Code Online (Sandbox Code Playgroud)

实体

候选人表

id int

名字串

fulltext_id

full_text表包含全文索引

id int

full_text_col文本

rank int //始终为null

关系

候选人 - FullText(1-1)

的openSession

CustomInterceptor custonInterceptor=new CustomInterceptor();
custonInterceptor.FulltextString="YourString";
sessionFactory.OpenSession(custonInterceptor);
Run Code Online (Sandbox Code Playgroud)