【问题标题】:ZendSearch Lucene boolean query doesn't correct work with numbersZendSearch Lucene 布尔查询不能正确处理数字
【发布时间】:2015-01-13 08:13:26
【问题描述】:

我是 Zend Framework 2 和 ZendSearch Lucene 的新手。 我的数据库表有三列整数,第一列是 id。 第二个是发布值(1 到 3),第三个是类别值(1 到 5)。 表格如下所示:

|id|发布|类别|
|1|1|1|
|2|1|2|
|3|1|3|
|4|2|3|
|5|2|4|

我使用以下查询对此进行了测试:
"publish:1" 返回正确的 id 的 1,2,3;
"publish:2" 返回正确 id 的 4,5;
"publish:3" 返回不正确的 id 的 1,2,3,4,5;结果应该为空。
"publish:1 AND category:1" 返回正确的 id 1;
"publish:1 AND category:3" 返回正确的 id 3;
"publish:1 AND category:4" 返回正确的空结果;
"publish:1 AND category:5" 返回不正确的 id 的 1,2,3;结果应该是空的。

当一个数字不存在时,结果不为空,它包含所有行。 是否有任何选项,当数字不存在时结果为空?

默认编码为 UTF-8: \ZendSearch\Lucene\Search\QueryParser::setDefaultEncoding('UTF-8'); \ZendSearch\Lucene\Analysis\Analyzer\Analyzer::setDefault(new \ZendSearch\Lucene\Analysis\Analyzer\Common\Utf8Num\CaseInsensitive());

id 是未索引的,publish 和 category 是关键字。

【问题讨论】:

    标签: php mysql lucene zend-framework2 zend-search-lucene


    【解决方案1】:

    我想我找到了答案。

    当我使用以下代码构建查询时,查询为“+(publish:1) +(category:1)”,这有效。

    $query = new \ZendSearch\Lucene\Search\Query\Boolean();
    
    $termPublish = new \ZendSearch\Lucene\Index\Term(1, 'publish' );
    $subqueryPublish = new \ZendSearch\Lucene\Search\Query\Term($termPublish);
    $query->addSubquery($subqueryPublish, true); // required
    
    $termCategory = new \ZendSearch\Lucene\Index\Term(1, 'category' );
    $subqueryCategory = new \ZendSearch\Lucene\Search\Query\Term($termCategory);
    $query->addSubquery($subqueryCategory, true); // required
    

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多