问题描述
我有一个使用布尔全文搜索的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 (将#修改为@)