【问题标题】:NHibernate Full Text SearchNHibernate 全文搜索
【发布时间】:2010-08-06 14:11:30
【问题描述】:
尝试使用 nhibernate 获得文本搜索功能的最佳方法是什么?我已阅读有关 NHibernate.Search 的信息,但在任何地方都找不到该库。
我下载了最新的NHibernate源代码(2.1.2)并编译了,但还是找不到NHibernate.Search。
有人有什么建议吗?或者任何其他的文本搜索方法?
编辑:使用 MySQL 数据库,以防万一。
【问题讨论】:
标签:
mysql
nhibernate
search
full-text-search
【解决方案1】:
NHiberante.Search 一个单独的 dll 使 Nhiberante 和 Lucene 一起工作。如果你想使用它,你必须下载并引用它。您可能想阅读一些关于 Lucene 的介绍,以了解 Nhiberante.Search 的工作原理。
可以获取 dll 的地方之一是hornget
如果您想要 MySql 特定的全文搜索选项,Nhibernate 不会提供任何帮助供您使用它们。
【解决方案2】:
你可以使用 Expression.Sql 但我认为使用 mysql 存储过程是个好主意
你的 MySql 存储过程:
CREATE PROCEDURE `GetProductsByText`(IN `queryText` VARCHAR(100) CHARSET utf8)
SELECT *
FROM Products
WHERE MATCH(Title, Description) AGAINST (queryText)
你的 nhibernate 映射 xml 文件:
<sql-query name="GetProductsByText">
<return class="Product"/>
call `GetProductsByText`( :queryText )
</sql-query>
你的 c# nhibernate 查询:
public IList<Product> FindByText (string text)
{
var session = SessionFactory.GetCurrentSession ();
IQuery query = session.GetNamedQuery ("GetProductsByText");
return query.SetString ("queryText", text).List<Product> ();
}