我无法将文档从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": "[B@7f017c71",
"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
},
标题被正确编入索引
内容显示为废话,而且无法搜索。
我有什么想法可以解决这个问题吗?
提前致谢。
答案 0 :(得分:1)
我怀疑DB中的内容字段必须是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(title)as title,LOWER(content)as content,DATE_FORMAT(cr,&#39;%Y-%m - %dT%H:%i:%sZ&#39;)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&#34;
2)尝试将textgen更改为string。
3)尝试删除stripHTML =&#34; true&#34;来自内容
希望这有助于您解决问题或至少帮助您进一步调查。