我在使用Zend_Lucene和åäö这样的外国字符时遇到了一些严重的问题。创建索引和查询时会出现这些问题。我已经尝试过iso-8859-1和utf-8。
不起作用的查询看起来像“+_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中随机选择的)
注意:iconv():在TextNum.php中检测到输入字符串中的非法字符。
这是通过检查$ this-> _input是否为空来“解决”,因为它似乎引起了通知。注意:奇怪的查询结果是一个预先存在的条件。
当我使用外来字符搜索关键字字段时,我收到上面的错误,但是当我搜索文本字段时,它的行为有所不同。然后它会在下面生成大约一百个错误。
注意:未定义的偏移量:1996年在\ Zend \ Search \ Lucene \ Search \ Query \ MultiTerm.php第472行
但它会产生看似正确的结果集!另外,第二个查询不会在Luke中生成任何结果。
我也尝试过UTF-8,因为据我所知,Zend_Lucene在内部使用它。由于数据集是ISO-8859-1,我使用utf8_encode
进行转换。但索引会产生以下错误。
注意:未定义的偏移量:266979英寸 \ Zend的\搜索\ Lucene的\首页\ SegmentInfo.php 在第632行
注意:试图获得属性 非对象 \ Zend的\搜索\ Lucene的\首页\ SegmentMerger.php 第196行
注意:试图获得属性 非对象 \ Zend的\搜索\ Lucene的\首页\ SegmentMerger.php 在线200
注意:未定义的索引:in \ Zend的\搜索\ Lucene的\首页\ SegmentWriter.php 在第231行
注意:试图获得属性 非对象 \ Zend的\搜索\ Lucene的\首页\ SegmentWriter.php 在第231行
注意:未定义的偏移量:250595英寸 \ Zend的\搜索\ Lucene的\首页\ SegmentInfo.php 在线2020
注意:试图获得属性 非对象 \ Zend的\搜索\ Lucene的\首页\ SegmentInfo.php 在线2020
注意:未定义的索引:in \ Zend的\搜索\ Lucene的\首页\ SegmentWriter.php 在第465行 ...
因此。有人可以解释一下吗? :)我相信(经过几天的谷歌搜索),我不是唯一一个遇到这种情况的人。
答案 0 :(得分:1)
我建议您尝试使用UTF-8 compatible text analyzer。 看起来您使用的分析仪会破坏非ASCII字符。 您应确保文本输入正确,并以正确的格式到达Lucene。