我在使用Zend_Lucene和åäö这样的外国字符时遇到了一些严重的问题.创建索引和查询时会出现这些问题.我已经尝试了iso-8859-1和utf-8.
ISO-8859-1
不起作用的查询看起来像“_area:skåne”.使用Zend_Lucene我没有匹配,但如果我在Luke中运行此查询,我会得到许多匹配的文档.
该索引包含20个字段.使用以下语法添加“_area”字段:
$doc->addField(Zend_Search_Lucene_Field::keyword('_area', strtolower($item['area']), 'iso-8859-1'));
我正在使用Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive分析器.
在运行索引时,有时会出现以下错误消息(索引的文档是从带有iso-8859-1编码的DB中随机选择的)
Notice: iconv(): Detected an illegal character in input string in TextNum.PHP.
这是通过检查$this-> _input是否为空来“解决”,因为它似乎引起了通知.注意:奇怪的查询结果是预先存在的条件.
当我使用外来字符搜索关键字字段时,我收到上面的错误,但是当我搜索文本字段时,它的行为有所不同.然后它会在下面生成大约一百个错误.
Notice: Undefined offset: 1996 in \Zend\Search\Lucene\Search\Query\MultiTerm.PHP on line 472
但它产生看起来像正确的结果集!另外,第二个查询不会在Luke中生成任何结果.
UTF-8
我也尝试过UTF-8,因为据我所知,Zend_Lucene在内部使用它.由于数据集是ISO-8859-1,我使用utf8_encode进行转换.但索引会产生以下错误.
Notice: Undefined offset: 266979 in
\Zend\Search\Lucene\Index\SegmentInfo.PHP
on line 632Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentMerger.PHP
on line 196Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentMerger.PHP
on line 200Notice: Undefined index: in
\Zend\Search\Lucene\Index\SegmentWriter.PHP
on line 231Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentWriter.PHP
on line 231Notice: Undefined offset: 250595 in
\Zend\Search\Lucene\Index\SegmentInfo.PHP
on line 2020Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentInfo.PHP
on line 2020Notice: Undefined index: in
\Zend\Search\Lucene\Index\SegmentWriter.PHP
on line 465
…
所以.有人可以解释一下吗? :)我相信(经过几天的谷歌搜索),我不是唯一一个遇到这个.
解决方法:
我建议你尝试使用UTF-8 compatible text analyzer.
看起来您使用的分析仪会破坏非ASCII字符.
您应确保文本输入正确,并以正确的格式到达Lucene.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。