Nhibernate 相似匹配

Nhibernate 相似匹配,nhibernate,Nhibernate,许多搜索引擎都有“你的意思是什么”的功能 是否有一种简单的方法可以使用(N)Hibernate(例如ICriteria)根据相似性查找实体(例如关键字)。请注意,我不是指表达,像这样或类似的东西 我希望这个问题有意义 谢谢 基督教徒 附言: 在我的例子中,相似性意味着(让我们说)70%的字符是相同的 我设想实现一个名为bla的扩展方法,可用于我的条件查询: ICriteria标准=Session.CreateCriteria(typeof(xxx)); 添加(Expression.bla(“na

许多搜索引擎都有“你的意思是什么”的功能

是否有一种简单的方法可以使用(N)Hibernate(例如ICriteria)根据相似性查找实体(例如关键字)。请注意,我不是指表达,像这样或类似的东西

我希望这个问题有意义

谢谢

基督教徒

附言:

在我的例子中,相似性意味着(让我们说)70%的字符是相同的

我设想实现一个名为bla的扩展方法,可用于我的条件查询:

ICriteria标准=Session.CreateCriteria(typeof(xxx)); 添加(Expression.bla(“name”,name));
将Criteria.List()作为列表返回

这超出了nHibenate的范围。nHibernate是一个数据访问层,它只能做数据库所做的事情。您必须自己确定相似性,可能需要维护一个常见错误类型表。这就是搜索引擎所做的,它们不仅仅是神奇地确定什么是打字错误。

Hibernate不会让你的数据库变得更智能。“你的意思是”是一个非常棘手的事情;它通常是通过对搜索引擎的反向文件索引结构和查询日志的元数据进行单词和n-gram(多单词序列)的统计分析来实现的


作为exmaple,如果我键入
exmaple code
,引擎可能会扫描语料库中最常见的已知单词,计算每个单词与术语
exmaple
的编辑距离。它可能会发现
示例
,并因此建议,“您的意思是
示例代码

相似性很难定义,并且IMHO在许多用例中的定义不同。相似性可以是语音上的(有不同的算法,比如德国的Köllner Verfahren)。在语音相似的情况下,它是一个计算字符串表示的函数。然后可以使用Levenshtein距离来比较它们。我对(N)Hibernate不太了解,但是可以使用扩展方法来计算对象库上的比较


-sa

我不认为NHibernate有一个内在地为您提供类似词语的功能

你必须创建一个距离函数,它计算单词之间的距离(它们是多么相似),并且基于一个阈值,你可以考虑所有单词的距离值低于你的原始单词的值。


这个距离函数是关键,您可以根据许多标准计算单词之间的距离

您可以在SQL中使用SOUNDEX函数

SELECT
    * 
FROM
    Products
WHERE
    SOUNDEX(ProductName) = SOUNDEX('beer')
这将返回名称类似于“啤酒”的产品

更新:

SELECT
    * 
FROM
    Products
WHERE
    DIFFERENCE(ProductName, 'beer') IN (3, 4)
这也将返回具有类似名称的产品


-Pavel

正如其他人所说,它通常超出了RDBMS的范围。使用Lucene.Net(可能通过)或(可能通过)代替。Solr甚至还提供了开箱即用的功能,您可以使用它轻松实现“Doy you mean”功能。

我只知道这称为“模糊查找”-SSI中有类似的功能,我在过去使用过。当我说相似性时,我指的是共同字符-不区分大小写。谢谢Pavel-这听起来很有趣,但它会与sql server联系在一起。要实现Expression.InsensitiveLike(n)hibernate是否使用“ansi标准数据库功能”?您好,我是否可以使用ICriteria实现此功能。我相信我可以实现一个接口或一些东西来计算可以以某种方式使用的公共字符数。c#(3.5)对使用Expression.Bla时可能出现的方法有一个特殊的名称。希望这是有意义的。我知道NHIbernate是一种数据访问技术,但我也看到了它与Lucene集成的地方——我认为实际上有一本关于hibernate搜索的书。>搜索引擎就是这样做的,它们不仅仅神奇地确定了什么是错别字。我不确定他们是否将这些信息存储在数据库中——我更倾向于认为他们使用类似算法的字符,或者两者兼而有之。他们必须明确地知道拼写错误不是某种名称。但是你可能会有不同的“相似性”标准。维护一个常见错误类型表是一个非常糟糕的主意!别这样!我也是这么想的,帕维尔。很有趣——只是试了一下,结果看起来还不错。这是ansi标准的UDF吗?对于SOUNDEX:所有语音算法的缺点是,它们专注于特定的语言(SOUNDEX英语)。Köllner Verfahren是为德国等国开发的。第二:相似并不意味着完全相同的函数输出,所以可能你也必须对soundex结果有距离。谢谢-扩展方法-这就是我要找的。我设想的是,我实现了一个名为bla的扩展方法,可用于我的条件查询:ICriteria criteria criteria=Session.CreateCriteria(typeof(xxx));添加(Expression.bla(“name”,name));将Criteria.List()作为列表返回;