Solr 日期变量解析器不适用于 MySql
Solr date variable resolver is not working with MySql
我使用 Solr 3.3 版本作为 Data Import Handler(DIH) 和 Oracle .
它对我来说很好用。
现在我正在尝试 Mysql。
随着数据库的变化,我已经将 data-config.xml 中使用的查询更改为 MySql.
查询包含在 http 中传递 url 的变量。
同样的事情在 Oracle 中使用变量解析器工作正常,但在 MySql.
中却不行
查询是:
SELECT DISTINCT doc.document_id ,
doc.first_version_id,
doc.acl_id,
fol.folder_id
FROM ds_document_c doc,
ds_folder fol
WHERE doc.cabinet_id = ${dataimporter.request.cabinetId}
AND fol.folder_id = doc.document_folder_id
AND doc.index_state_modification_date >= to_date('${dataimporter.request.lastIndexDate}', 'DD/MM/YYYY HH24:MI:SS')
而 Url 是:
localhost:8983/solr/dataimport?command=full-import&clean=true&commit=true&cabinetId=17083360&lastIndexDate='24/05/2015 00:00:00'
Solr 正在构建如下查询:
SELECT DISTINCT doc.document_id ,
doc.first_version_id,
doc.acl_id,
fol.folder_id
FROM ds_document_c doc,
ds_folder fol
WHERE doc.cabinet_id = 24
AND fol.folder_id = doc.document_folder_id
AND doc.index_state_modification_date >= to_date('[?, '28/05/2015 11:13:50']', 'DD/MM/YYYY HH24:MI:SS')
我无法弄清楚为什么在这种情况下日期变量没有正确重新定位。
因为 to_date('[?, '28/05/2015 11:13:50']'
不是正确的 MySql 语法,我得到 MySql 语法错误。
我收到以下错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[?, '28/05/2015 11:13:50'], 'DD/MM/YYYY HH24:MI:SS')))' at line 1
谁知道问题出在哪里?为什么 变量解析器 没有按预期工作?
注:to_date是我们在MySql中写的函数。
我检查了 solr 的源代码并试图解决我的问题。
我有一个修复程序,它对我有用。
日期情况下的变量 resolve 以某种方式生成数组等
它附加
'[?, '28/05/2015 11:13:50']'.
在TemplateString.java方法fillTokens(VariableResolver resolver)
我添加了一个代码,用于删除添加到日期的额外部分。
if (i < s.length) {
if(s[i].startsWith("[")){
String temp = s[i].replace("[?,", "");
temp = temp.replace("]", "");
sb.append(temp);
}else{
sb.append(s[i]);
}
}
通过此更改,变量解析器将日期附加为“28/05/2015 11:13:50”并删除了我的 MySql 语法错误。
(注意:我没有太多时间分析为什么日期变量解析为数组。我做了一个临时修复并解决了我的问题。)
我使用 Solr 3.3 版本作为 Data Import Handler(DIH) 和 Oracle . 它对我来说很好用。
现在我正在尝试 Mysql。 随着数据库的变化,我已经将 data-config.xml 中使用的查询更改为 MySql.
查询包含在 http 中传递 url 的变量。 同样的事情在 Oracle 中使用变量解析器工作正常,但在 MySql.
中却不行查询是:
SELECT DISTINCT doc.document_id ,
doc.first_version_id,
doc.acl_id,
fol.folder_id
FROM ds_document_c doc,
ds_folder fol
WHERE doc.cabinet_id = ${dataimporter.request.cabinetId}
AND fol.folder_id = doc.document_folder_id
AND doc.index_state_modification_date >= to_date('${dataimporter.request.lastIndexDate}', 'DD/MM/YYYY HH24:MI:SS')
而 Url 是:
localhost:8983/solr/dataimport?command=full-import&clean=true&commit=true&cabinetId=17083360&lastIndexDate='24/05/2015 00:00:00'
Solr 正在构建如下查询:
SELECT DISTINCT doc.document_id ,
doc.first_version_id,
doc.acl_id,
fol.folder_id
FROM ds_document_c doc,
ds_folder fol
WHERE doc.cabinet_id = 24
AND fol.folder_id = doc.document_folder_id
AND doc.index_state_modification_date >= to_date('[?, '28/05/2015 11:13:50']', 'DD/MM/YYYY HH24:MI:SS')
我无法弄清楚为什么在这种情况下日期变量没有正确重新定位。
因为 to_date('[?, '28/05/2015 11:13:50']'
不是正确的 MySql 语法,我得到 MySql 语法错误。
我收到以下错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[?, '28/05/2015 11:13:50'], 'DD/MM/YYYY HH24:MI:SS')))' at line 1
谁知道问题出在哪里?为什么 变量解析器 没有按预期工作?
注:to_date是我们在MySql中写的函数。
我检查了 solr 的源代码并试图解决我的问题。
我有一个修复程序,它对我有用。
日期情况下的变量 resolve 以某种方式生成数组等 它附加
'[?, '28/05/2015 11:13:50']'.
在TemplateString.java方法fillTokens(VariableResolver resolver) 我添加了一个代码,用于删除添加到日期的额外部分。
if (i < s.length) {
if(s[i].startsWith("[")){
String temp = s[i].replace("[?,", "");
temp = temp.replace("]", "");
sb.append(temp);
}else{
sb.append(s[i]);
}
}
通过此更改,变量解析器将日期附加为“28/05/2015 11:13:50”并删除了我的 MySql 语法错误。
(注意:我没有太多时间分析为什么日期变量解析为数组。我做了一个临时修复并解决了我的问题。)