2012-10-17 57 views
2

我有Solr 4.0啓動並運行並使用DataImportHandler從MySQL導入數據。Solr DataImportHandler MySQL 5.0 SELECT CONCAT查詢結果以base64編碼

我沒有注意到,如果我指出MySQL 5.5數據源DataImportHandler everyhting按預期工作。但是,當使用完全相同的Solr/DataImportHandler配置和完全相同的數據庫,但在MySQL 5.0上運行時,某些字段會返回base64編碼。在數據-config.xml中

相關條目

 <dataSource type="JdbcDataSource" 
        driver="com.mysql.jdbc.Driver" 
        name="DB-SOURCE" 
        url="jdbc:mysql://dbhost/dbname" 
        user="user"  
        password="password" 
    /> 

    <document name="articles"> 
<entity name="article_ph" transformer="HTMLStripTransformer" dataSource="DB-SOURCE" pk="article_id" 
          query="SELECT 'Politics Home' AS article_site, 
              CONCAT('ph-article-', article_id) AS article_id, 
              article_title, 
              article_text_plain AS article_content, 
              article_articletype_id, 
              article_datetime AS article_date, 
              'Uncategorised' AS article_section, 
              'Non Member' AS article_source 
              FROM articles 
              WHERE 
              article_datetime!='0000-00-00 00:00:00' 
              AND article_datetime is NOT NULL 
              AND article_live=1 
              AND article_text_plain!='' 
              AND article_text_plain IS NOT NULL 
              AND article_title is NOT NULL 
              AND article_title !=''"> 
      <field column="ARTICLE_SITE" name="article_site" /> 
      <field column="ARTICLE_ID" name="article_id" /> 
      <field column="ARTICLE_TITLE" name="article_title" /> 
      <field column="ARTICLE_CONTENT" name="article_content" stripHTML="true" /> 
      <field column="ARTICLE_DATE" name="article_date" /> 
      <field column="ARTICLE_SECTION" name="article_section" /> 
      <field column="ARTICLE_SOURCE" name="article_source" /> 
      <entity name="articletype_name" dataSource="DB-SOURCE" 
          query="SELECT 
          articletype_name 
          FROM articletypes 
          WHERE articletype_id='${article_ph.article_articletype_id}'"> 
    <field column="articletype_name" name="article_type"/> 
      </entity> 
</entity> 

當我的MySQL 5.5運行進口指點我得到:

<arr name="article_id"><str>ph-article-124</str></arr> 

當我在MySQL 5.0中運行的進口指點我得到的base64文章編碼ID:

<arr name="article_id"><str>cGgtYXJ0aWNsZS0xMjQ=</str></arr> 

所有其他字段可以正確回來。

兩個DB上的排序規則和字符集都是相同的。

任何幫助表示讚賞。

回答

3

嘗試將其轉換回字符串

CONCAT('ph-article-', CAST(article_id AS CHAR(50)) 
+0

看起來很有希望。我還沒有測試過,但根據關於CONCAT函數的MySQL參考手冊:「...如果所有參數都是非二進制字符串,結果是非二進制字符串,如果參數包含任何二進制字符串,則結果是二進制字符串。數字參數被轉換爲等價的字符串形式,這是一個非MySQL二進制字符串5.5.3之前,它是一個二進制字符串;爲了避免這種情況並生成一個非二進制字符串,可以使用顯式類型轉換,如下例所示:...「 – Andrey

+0

這適用於Mysql 5.1.73。我連接了兩個文本字段和兩個數字字段,並且具有完全相同的問題。讀到這個我以爲我可以逃脫,確保_final_值被轉換爲不是數字,但我必須投出兩個數字字段。 'concat_ws(「|」,h2.heading,r2.ref_desc,CAST(h2.count1 AS CHAR(7)),cast(h2.count2 AS CHAR(7)))as encodedSolrField'。感謝你! – frances