如何使用JPA的MySQL全文搜索

我想使用JPA使用MySQL’s full text search功能,而不必使用本机查询.

我正在使用EclipseLink,它具有支持本机SQL命令的功能:FUNC.但是,帮助示例仅显示这与简单的MySQL函数一起使用.我尽最大的努力让它与MATCH&反对如下:

@PersistenceContext(name="test")
EntityManager em;

Query query = em.createQuery("SELECT person FROM People person WHERE FUNC('MATCH', person.name) FUNC('AGAINST', :searchTerm)");
...
query.getResultList();

这给出了以下例外:

Caused by: NoViableAltException(32@[()* loopback of 822:9: (m= MULTIPLY right= arithmeticFactor | d= DIVIDE right= arithmeticFactor )*])
    at org.eclipse.persistence.internal.libraries.antlr.runtime.DFA.noViableAlt(DFA.java:159)
    at org.eclipse.persistence.internal.libraries.antlr.runtime.DFA.predict(DFA.java:116)
    at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticTerm(JPQLParser.java:4557)
    ... 120 more

我对使用FUNC方法的其他替代方案持开放态度.

我正在使用EJB 3和EclipseLink 2.3.1.

最佳答案
FUNC仅适用于普通打印功能,


MATCH(arg1,arg2)

因为MATCH arg1 AGAINST arg2没有按照正常打印功能的方式打印,所以FUNC不能用来调用它.

EclipseLink ExpressionOperators确实支持这样的打印功能,因此您可以定义自己的ExpressionOperator,但ExpressionOperators目前仅通过EclipseLink Expression查询支持,而不是通过JPQL支持.您可以记录增强功能以​​在JPQL中获得运算符支持.

您还可以使用本机SQL查询.

转载注明原文:如何使用JPA的MySQL全文搜索 - 代码日志