微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Lucene外国字符问题

我在使用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 632

Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentMerger.PHP
on line 196

Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentMerger.PHP
on line 200

Notice: Undefined index: in
\Zend\Search\Lucene\Index\SegmentWriter.PHP
on line 231

Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentWriter.PHP
on line 231

Notice: Undefined offset: 250595 in
\Zend\Search\Lucene\Index\SegmentInfo.PHP
on line 2020

Notice: Trying to get property of
non-object in
\Zend\Search\Lucene\Index\SegmentInfo.PHP
on line 2020

Notice: Undefined index: in
\Zend\Search\Lucene\Index\SegmentWriter.PHP
on line 465

所以.有人可以解释一下吗? :)我相信(经过几天的谷歌搜索),我不是唯一一个遇到这个.

解决方法:

我建议你尝试使用UTF-8 compatible text analyzer.
看起来您使用的分析仪会破坏非ASCII字符.
您应确保文本输入正确,并以正确的格式到达Lucene.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐