For a simple case like that, I would just use the criteria API and an
Expression.Sql() restriction.

http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/querycriteria.html


On Sep 19, 7:57 am, burkhard_m <[EMAIL PROTECTED]> wrote:
> Hi everyone!
>
> I'm currently working on a small merchandise management tool and have
> to implement a full-text search for the article descriptions.Our
> project is based on NHibernate & ActiveRecord as well as MSSQL Server
> 2005 and we would prefer to use the indexing capability of the SQL
> Server rather than implementing NHibernate.Search with Lucene.NET.
>
> I have read about several suggestions at Google Groups including
> Ayende Rahien's:
> “You need to create an derived dialect and register the contains
> function, if
> you want to use HQL. Or, you can create an ICritertion implementation
> that will deal with this.”
> (seehttp://groups.google.com/group/nhusers/browse_thread/thread/e9745dafd...)
>
> I tried hard for several days but I’m stuck. I have no idea how to
> implement this correctly.
> All I get is a QueryException telling me that I have a “Incorrect
> query syntax”.
>
> Yes, the Full text indexing is activated for the property ‘Text’.
> The SQL-Query works:
>      SELECT * FROM [dbo].[T_Descriptions]
>   WHERE CONTAINS(Text, ' "T*" ')
>
> The HQL-Query "FROM Description d WHERE d.Text LIKE 'T%'" also works
> fine.
>
> Would anyone help me, please?
> Maybe you could tell me what I have done wrong from the following
> code?
>
> Thanks a lot!
>
> Best regards,
> Martin
>
> // The config section
>
>   <activerecord isWeb="false">
>     <config>
>       <add key="hibernate.connection.driver_class"
> value="NHibernate.Driver.SqlClientDriver" />
>       <add key="hibernate.dialect" value="SQLServerDialectWithFTS,
> <AssemblyName>" />
>       <add key="hibernate.connection.provider"
> value="NHibernate.Connection.DriverConnectionProvider" />
>       <add key="hibernate.max_fetch_depth" value="3"></add>
>       <add key="hibernate.connection.connection_string"
> value="ConnectionString = ${ourConnectionString}" />
>     </config>
>   </activerecord>
>
> // The model
>
>     [ActiveRecord("[T_Descriptions]")]
>     [Serializable]
>     public class Description : ActiveRecordBase<Description>
>     {
>         protected Description() {}
>
>         protected Description(string text) : this()
>         {
>             Text = text;
>         }
>
>         [PrimaryKey]
>         public long Id { get; set; }
>
>         [Property]
>         public string Text { get; set; }
>     }
>
> // The customized dialect
>
>     public class SQLServerDialectWithFTS : MsSql2005Dialect
>     {
>       public SQLServerDialectWithFTS()
>       {
>             RegisterFunction("CONTAINS",  new
> StandardSQLFunction("CONTAINS", NHibernateUtil.String));
>       }
>     }
>
> // The search
>
>     IConfigurationSource source = ActiveRecordSectionHandler.Instance;
>
> Castle.ActiveRecord.ActiveRecordStarter.Initialize(typeof(Description).Asse 
> mbly,
> source);
>
>     using(SessionScope scope = new SessionScope())
>     {
>        var sq = new SimpleQuery<Description>(typeof (Description),
>                                             "FROM Description d WHERE
> CONTAINS(d.Text, ' \"T*\" ')");
>        var res = sq.Execute();
>     }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to