0

Zend Lucene 搜索文档

Lucene 文档
    pk:关键字
    category_id:关键字
    标题:未存储
    描述:未存储

这是我的字符串查询“java lucene AND +category_id:7”。结果在这里:

大批
(
    [0] => 数组
        (
            [PK] => 209
            [category_id] => 7
            [id] => 0
            [分数] => 0.40750848701418
        )
   [1] => 数组
        (
            [PK] => 225
            [category_id] => 7
            [id] => 3
            [分数] => 0.30750848701619
        )

    [2] => 数组
        (
            [PK] => 211
            [category_id] => 8 ====>>> 错误!!! 
            [id] => 2
            [分数] => 0.37152213415004
        )

)

您可以仅对 category_id = 7 进行查询搜索吗?提前致谢。

4

2 回答 2

2

我已经通过使用 Zend Query Parsing 解决了这个问题

$strQuery = Zend_Search_Lucene_Search_QueryParser::parse('java lucene');

$cateTerm  = new Zend_Search_Lucene_Index_Term(7 , 'category_id');
$cateQuery = new Zend_Search_Lucene_Search_Query_Term($cateTerm);

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($strQuery, true /* required */);
$query->addSubquery($cateQuery, true /* required */);

结果将仅在 category_id = 7 中:)

于 2011-10-28T03:02:55.530 回答
0

您可以AND +category_id:7从查询中删除,您想要的是一个过滤器,因为+category_id:7不需要作为排名值。

我不知道如何实现它,Zend_Lucene但在 solr 中我曾经传递 fq 参数,这可能会给你一个提示:)

过滤是一个限制搜索空间并仅允许将文档子集考虑用于搜索命中的过程。您可以使用此功能来实现搜索结果中的搜索。Lucene 自带各种内置过滤器,如 BooleanFilter、CachingWrapperFilter、ChainedFilter、DuplicateFilter、PrefixFilter、QueryWrapperFilter、RangeFilter、RemoteCachingWrapperFilter、SpanFilter 等(THE NATIVE JAVA VERSION)过滤器可以传递给IndexSearcher的搜索方法来过滤匹配的文档筛选条件。

于 2011-10-27T11:46:52.457 回答