【发布时间】:2012-01-23 18:58:09
【问题描述】:
我有一个应用程序,我需要在各种基于文本的字段中进行搜索。该应用程序是使用 NHibernate 作为 ORM 开发的。
我想在搜索中实现 Porter Stemming,以便即使关键字与相似词匹配也能够返回相关结果,例如产品描述包含 memories 而搜索关键字是 memory .
谁能建议此类搜索的最佳做法?想到的第一个想法是在数据库中存储同一字段的两个版本,例如:
Description
Description_Search
Description 列将是网站管理员输入的文本,并且是前端可见的文本。
Description_Search 将包含相同的文本,但通过了 Porter-Stemming 算法。然后搜索查询将基于Description_Search 字段,而不是Description。
这有意义吗?存储几乎相同文本的两个版本是否浪费空间?
另外,Lucene.Net 会在这种情况下提供帮助吗?我也在考虑集成 Lucene.Net 以进行基于全文的搜索,但尚未详细研究。
提前致谢!
【问题讨论】:
-
一些 RDBMS 产品提供了便于搜索的功能,您无需做很多额外的工作。想到 SQL Server 的全文搜索,但还有其他的。如果它极大地提高了性能,那么复制数据并不是浪费。实际上,这与索引相同。
-
Lucene 看起来很简单:stackoverflow.com/a/5394769/54937
标签: c# database search lucene.net porter-stemmer