Solr日期变量解析器不能与MySql一起使用

时间:2015-05-29 10:12:22

标签: mysql oracle solr dataimporthandler

我已将 Solr 3.3 版本用作数据导入处理程序(DIH) Oracle 。 它对我来说很好。

现在我正在尝试使用 Mysql 。 随着数据库的更改,我更改了 mySql data-config.xml 中使用的查询。

查询包含在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')

和网址是:

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中编写的函数。

1 个答案:

答案 0 :(得分:2)

我查看了solr的源代码并试图解决我的问题。

我有一个修复它并为我工作。

在日期的情况下变量resolve以某种方式创建数组等等 它附加了

'[?, '28/05/2015 11:13:50']'.

在方法fillTokens的TemplateString.java中(VariableResolver解析器) 我添加了一个代码,删除了添加到日期的额外部分。

if (i < s.length) {
   if(s[i].startsWith("[")){
      String temp = s[i].replace("[?,", "");
      temp = temp.replace("]", "");
      sb.append(temp);
   }else{
      sb.append(s[i]);
   }
}

通过此更改,变量解析程序会将日期附加为&#39; 28/05/2015 11:13:50&#39;并删除了我的MySql语法错误。

(注意:我没有太多时间来分析为什么日期变量被解析为数组。我已经做了一个临时修复,这解决了我的问题。)