当前位置: 首页 > 面试题库 >

Hibernate + MSSQL +通过包含进行全文本搜索

简俊楚
2023-03-14
问题内容

我的目标是将MSSQL全文功能与HQL一起使用。在哪种情况下,我编写了一个特定的SQLFunction,将我的“全文”函数映射到contains函数。

但是,问题在于,在HQL中(似乎)我必须明确使用返回类型,MSSQL Contains函数不使用或不接受该返回类型。

这就是它在MSSQL中的工作方式:

select distinct id from content c where CONTAINS(c.content, 'p')

这是我在HQL中使用它的想法:

select id from Content c  where fulltext(c.content, 'p')

这不起作用,因为HQL需要返回类型。例如,这将在HQL中解析:

select id from Content c  where fulltext(c.content, 'p') = true

它将生成为SQL:

select distinct id from content c where CONTAINS(c.content, 'p') = 1

在MS SQL中不起作用。

到目前为止,我的想法是,但是在这种设置下似乎是不可能的:

  1. 使hibernate解析函数没有返回值(在我使用的版本中,Hibernate不支持此功能)
  2. 尝试混合使用HQL和SQL(似乎也不起作用)

有人有其他想法或帮助吗?

我使用的Hibernate版本是3.2.6ga和MSSQL Server 2008。


问题答案:

我找到了一种对我有用的方法。

而不是产生

CONTAINS(a,b)

它会产生

CONTAINS(a,b) AND 1

并结合HQL查询

fulltext(a,b) = true

它将导致:

CONTAINS(a,b) AND 1 = 1

而且有效。



 类似资料:
  • 问题内容: 如果我搜索单个字符串,则效果很好: 但是我可以在下面的示例中有一个 or 语句吗? 问题答案: 在两个函数调用之间说 或使用函数使xpath不区分大小写

  • 问题内容: 我正在开发一个高容量的Web应用程序,其中的一部分是讨论帖子的MySQL数据库,该数据库需要平稳地增长到2000万+行。 我本来打算对表使用MyISAM(用于内置的全文本搜索功能),但是由于单个写入操作而使 整个表 被锁定的想法使我陷入困境。行级锁具有更大的意义(更不用说InnoDB在处理大型表时的其他速度优势)。因此,基于这个原因,我决心使用InnoDB。 问题是… InnoDB没有

  • 我试图遍历一个JList,其中每个项目都包含:JGroup-JLabel 目前我拥有的是: 我得到的结果是: Item=javax。摆动JPanel[,0,0,0x0,无效,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=

  • 问题内容: 在哪里可以找到有关WDS的文档,特别是使用C#中的SQL查询来查询WDS?是否有任何资源列出可以从SystemIndex查询的列?另外,我希望查询返回“上下文”,即就像WDS客户端从找到搜索词的文档中的几行开始一样。尽管我相信3+的API是相同的,但我正在使用WDS 4.0。我检查了MSDN和其他站点,但是没有运气。 问题答案: 在MSDN论坛上发布并得到答案:可以搜索的列或属性:ht

  • 供参考:我的代码和这个so帖子非常相似。 谢谢

  • 我是sparql的新手,我正在尝试在其中一个属性中搜索一个单词。简单的查询工作良好,但我不知道如何执行全文搜索。我在jena网站上看到了这个例子: