我在使用 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 编码的数据库中随机选择的)
注意: iconv():在 TextNum.php 的输入字符串中检测到非法字符。
通过检查 $this->_input 是否为空来“解决”这个问题,因为这似乎导致了通知。注意:奇怪的查询结果是预先存在的条件。
当我使用外来字符搜索关键字字段时,我收到上述错误,但当我搜索文本字段时,它的行为有所不同。然后它会生成下面大约一百个错误。
注意:\Zend\Search\Lucene\Search\Query\MultiTerm.php 第 472 行中未定义偏移量:1996
但它产生了看起来正确的结果集!附带说明一下,第二个查询不会在 Luke 中生成任何结果。
UTF-8
我还尝试过 UTF-8,因为据我所知,Zend_Lucene 在内部使用它。由于数据集是 ISO-8859-1,我使用它进行转换utf8_encode
。但索引会产生以下错误。
注意:未定义的偏移量:266979 in
\Zend\Search\Lucene\Index\SegmentInfo.php
632号线
注意:试图获得以下财产
非对象在
\Zend\Search\Lucene\Index\SegmentMerger.php
196号线
注意:试图获得以下财产
非对象在
\Zend\Search\Lucene\Index\SegmentMerger.php
200号线
注意:未定义索引:in
\Zend\Search\Lucene\Index\SegmentWriter.php
231号线
注意:试图获得以下财产
非对象在
\Zend\Search\Lucene\Index\SegmentWriter.php
231号线
注意:未定义的偏移量:250595 in
\Zend\Search\Lucene\Index\SegmentInfo.php
2020年上线
注意:试图获得以下财产
非对象在
\Zend\Search\Lucene\Index\SegmentInfo.php
2020年上线
注意:未定义索引:in
\Zend\Search\Lucene\Index\SegmentWriter.php
465号线
...
所以。有人可以解释一下吗? :) 我相信(经过几天的谷歌搜索)我不是唯一经历过这种情况的人。