我已使用日期字段设置每个文档。 (关键字)
存储在其中的值采用此格式; 20100511
每次尝试执行远程查询时,都会出现以下错误:
date:[10000000 TO 20000000]
至少一个范围查询边界词 必须是非空的术语
任何人都有线索?
更新
我已经让这个以编程方式工作了。 这是否意味着解析器有问题?
$from = new Zend_Search_Lucene_Index_Term('10000000', 'dateOfBirthMod');
$to = new Zend_Search_Lucene_Index_Term('20000000', 'dateOfBirthMod');
$query = new Zend_Search_Lucene_Search_Query_Range($from, $to, true);
答案 0 :(得分:3)
实际上,这更像是一个可疑的默认值,而不是一个bug。您可以更改分析仪以允许数字。实际上,您甚至可以编写自定义分析器。见http://framework.zend.com/manual/en/zend.search.lucene.extending.html
允许数字被标记化的设置是
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive());
在Zf 1.x和Zf 2.x
中Zend\Search\Lucene\Analysis\Analyzer\Analyzer::setDefault(new Zend\Search\Lucene\Analysis\Analyzer\Common\TextNum\CaseInsensitive());
答案 1 :(得分:2)
显然it is a bug在查询解析器中(相当老btw)。我建议您为该问题添加注释或打开一个新注释以确认它仍然在ZF的x.x版本中发生。
答案 2 :(得分:1)
我已经找到了这个bug的解决方法,这个bug源于名为tokenize()的方法,该方法不返回任何值,可以在Zend / Search / Lucene / Analysis / Analyzer.php中找到
如果使用最新的ZF版本(1.10.7),可以尝试使用以下代码替换代码。
public function tokenize($data, $encoding = '')
{
$this->setInput($data, $encoding);
$tokenList = array();
/*
while (($nextToken = $this->nextToken()) !== null) {
$tokenList[] = $this->_input;
}
*/
$tokenList[] = new Zend_Search_Lucene_Analysis_Token( $this->_input, 1, 1 );
return $tokenList;
}
我不知道它是否适用于旧版本。
答案 3 :(得分:0)
首先,您必须在找到
之前将默认分析器更改为TextNum以允许数字ZF2:
\ZendSearch\Lucene\Analysis\Analyzer\Analyzer::setDefault(new \ZendSearch\Lucene\Analysis\Analyzer\Common\TextNum\CaseInsensitive());
其次,您的日期字段必须是关键字,而不是文本。