|
|
1
7
听起来SQL FTS的排名很接近,但并不完全符合您的要求,您已经将“不完全”的情况缩小到三个:
这三种方法的共同点是,一个非常简单的、自动的结果后处理程序可以使用这些规则来打破排名相同的结果之间的联系:如果存在精确匹配,则将其排名在非精确匹配之上,并将较短的标题排在较长的标题之前。您可能想考虑保持FTS,并简单地将一些代码(在存储的PROC或应用程序)放在FTS的上面,根据您所提到的标准,对成组的绑定结果进行排序。这可能比切换到Lucene或其他非Microsoft全文搜索实现更容易。 如果我站在你的立场上,既然你已经在FTS上做了一些工作,我会尝试上面的后处理技术,看看它是否“足够好”来满足你的需求,因为这可能是最容易做到的事情。 如果还不够好,我会先看看 Lucene.NET (免费), Solr (免费)及 dtSearch ($$$). 请注意,没有一个会像FTS那么简单,尤其是Lucene.NET,它是最流行的,功能非常全面,但需要大量的编码、配置、维护等。您可以看到 this SO thread 对于其他一些观点,如果你想要更多的观点,可能会有更多像这样的线索。 Pro Full-Text Search in SQL Server 2008 (该链接包含谷歌图书的一些摘录)。这能满足你的需要吗?如果没有,则有 lots of other options 既免费也不免费。 |
|
|
2
2
我知道你对重新发明轮子不感兴趣,但我想贡献一些东西,至少可以让你的轮子转动起来。 How to Strike a Match 是我最喜欢的关于这个话题的帖子之一。在这本书中,作者根据单词之间顺序双元组的相似性来匹配字符串。
这会惩罚长的、不相关的字符串,因为它们增加分母而不增加分子。
我没有考虑过如何在SQL应用程序中直接实现这一点。 |
|
|
3
0
在生产环境中使用SQL Server(2005)全文版和Lucene(.NET)后,我真的认为Lucene是更好的选择:
Lucene in Action Luke (3). 它同样适用于Java&&。净额(5)。此外,如果这让你感到兴奋,还有冬眠&&NHibernate实现( Hibernate Search |