php可以用lucene吗,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.

标签:php,lucene,zend-framework

来源: https://codeday.me/bug/20190710/1423752.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值