2014-07-24 74 views
0

我无法将文档从Mysql索引到Solr。DIH Mysql到Solr导入问题

我的配置:
数据-config.xml中

<dataConfig> 
<dataSource type="JdbcDataSource" 
driver="com.mysql.jdbc.Driver" 
url="jdbc:mysql://xxx?characterEncoding=utf8" 
user="xxx" 
password="xxx"/> 

<document name="articledata"> 
    <entity name="outer" 
transformer="HTMLStripTransformer" 
query="SELECT 
id,kundenid,LOWER(title) as title,LOWER(content) as content, 
DATE_FORMAT(cr,'%Y-%m-%dT%H:%i:%sZ') as cr, 
lang 
FROM articledata 
WHERE 
DATE(cr) BETWEEN DATE(DATE_SUB(now(),INTERVAL 3 DAY)) AND DATE(now()) 
AND content IS NOT NULL 
ORDER BY DATE(cr) DESC"> 



     <field column="id" name="id" /> 
     <field column="kundenid" name="kundenid" /> 
      <field column="title" name="title" /> 
      <field column="content" name="content" stripHTML="true" /> 
     <field column="cr" name="cr" /> 
     <field column="lang" name="lang" /> 
     </entity> 
    </document> 
</dataConfig> 

schema.xml中

<?xml version="1.0" ?> 
    <schema name="articledata core zero" version="1.1"> 
     <types> 
    <fieldtype name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="dt" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0" /> 

    <fieldType name="textgen" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 

    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

    </types> 

<fields> 
    <field name="id"  type="int" indexed="true" stored="true" required="true"/> 
    <field name="kundenid" type="int" indexed="true" stored="true" required="true"/> 
    <field name="title"  type="string" indexed="true" stored="true" /> 
    <field name="content" type="textgen" indexed="true" stored="true" /> 
    <field name="cr"  type="dt" indexed="true" stored="true" /> 
    <field name="lang"  type="string" indexed="true" stored="true" /> 
    <field name="_version_" type="long"  indexed="true" stored="true"/> 
</fields> 

<uniqueKey>id</uniqueKey> 
<defaultSearchField>content</defaultSearchField> 

<solrQueryParser defaultOperator="AND"/> 

</schema> 

利用这种结构,我得到的文件是这样的:

"docs": [ 
     { 
     "content": "[[email protected]", 
     "id": 20785923, 
     "cr": "2014-07-24T08:01:58Z", 
     "title": "general motors entdeckt neue mängel bei hunderttausenden wagen - news - alle aktuellen news - dpa-afx - general motors dl-,01 - onvista", 
     "kundenid": 1, 
     "_version_": 1474502436614832000 
     }, 

标题变索引正确

内容显示为废话字符,无法搜索。

任何想法,我可以解决这个问题?

在此先感谢。

回答

1

我怀疑你的数据库中的内容字段必须是text/BLOB,而不是varchar(因为标题必须是varchar)。因此,您可以正确地为标题编制索引,并且内容无法正确索引。

如果您在数据库中有BLOB数据或文本数据,那么使用具有正确的分词器,分析器和过滤器集合的字段类型可能会很有用。

例如,添加一个StandardTokenizerFactory会将令牌保留为有意义的值集。

的字段类型定义的例子:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldtype> 

如果问题仍然存在,然后下面的信息将帮助您在调查此问题:

1)可以检查从MySQL时,你所得到的值运行查询:SELECT ID,kundenid,LOWER(标题)作为标题,LOWER(内容)作为内容,DATE_FORMAT(cr,'%Y-%m-%dT%H:%i:%sZ')as cr,lang FROM articledata WHERE DATE(cr)在DATE(DATE_SUB(now(),INTERVAL 3 DAY))和DATE(now())之间的日期和内容不是NULL由DATE(cr)DESC命令“

2)尝试将textgen更改为字符串。

3)尝试删除stripHTML =“真”,从内容

希望这将帮助您解决您的问题,或至少帮助您进一步调查。

+0

我发现问题正如你所说,内容字段是一个blob。我将内容列的查询更改为 CONVERT(LOWER(内容)使用utf8)作为内容, – CuReSoft

+0

它解决了您的问题吗? –

+0

是solr现在正确索引文档。 – CuReSoft