我在使用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.
标签:php,lucene,zend-framework
来源: https://codeday.me/bug/20190710/1423752.html