Spring JDBC准备的语句具有布尔全文搜索格式问题

问题描述

我有一个使用布尔全文搜索的sql查询:

SELECT
    *,MATCH (job_title) AGAINST ('"product manager"' in boolean mode) AS title_relevance_exact,MATCH (job_description) AGAINST ('"product manager"' in boolean mode) AS description_relevance_exact,MATCH (job_title) AGAINST ('product manager' in boolean mode) AS title_relevance_part,MATCH (job_description) AGAINST ('product manager' in boolean mode) AS description_relevance_part
FROM
    jobs
WHERE
    MATCH(job_title,job_description) AGAINST ('product manager') AND
    date_posted >= now() - INTERVAL 30 DAY
ORDER BY
    job_title LIKE 'product manager' DESC,title_relevance_exact DESC,description_relevance_exact DESC,title_relevance_part DESC,description_relevance_part DESC
LIMIT 300;

'"product manager"'中的引号和语音标记对查询很重要。

当我将这个查询作为Spring jdbc准备好的语句运行时,我必须做一些变通方法以正确格式化字符串,因为如果我有'?',jdbc不会将此识别为参数:

String queryPrepared =
                "SELECT\n" +
                "   *,\n" +
                "   MATCH (job_title) AGAINST (? in boolean mode) AS title_relevance_exact,\n" +
                "   MATCH (job_description) AGAINST (? in boolean mode) AS description_relevance_exact,\n" +
                "   MATCH (job_title) AGAINST (? in boolean mode) AS title_relevance_part,\n" +
                "   MATCH (job_description) AGAINST (? in boolean mode) AS description_relevance_part\n" +
                "FROM\n" +
                "   jobs\n" +
                "WHERE\n" +
                "   MATCH(job_title,job_description) AGAINST (?) AND\n" +
                "   date_posted >= now() - INTERVAL 30 DAY\n" +
                "ORDER BY\n" +
                "   job_title LIKE ? DESC,\n" +
                "   title_relevance_exact DESC,\n" +
                "   description_relevance_exact DESC,\n" +
                "   title_relevance_part DESC,\n" +
                "   description_relevance_part DESC\n" +
                "LIMIT 500;";
        String param1 = String.format("'\"%1$s\"'",searchValue);
        String param2 = String.format("'%1$s'",searchValue);

        List<Map<String,Object>> resultPrepared = jdbcTemplate.queryForList(queryPrepared,new Object[] {param1,param1,param2,param2});

但是查询没有产生正确的结果,结果不是按预期顺序排列。我只能假设发生这种情况是由于准备好的语句参数中的格式。但是添加参数后看不到查询的样子,该如何调试呢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)