Zend Lucene搜索文件
Lucene Document pk:Keyword category_id:Keyword title:UnStored description:UnStored
这是我的字符串查询“java lucene AND + category_id:7”。 结果在这里:
Array ( [0] => Array ( [pk] => 209 [category_id] => 7 [id] => 0 [score] => 0.40750848701418 ) [1] => Array ( [pk] => 225 [category_id] => 7 [id] => 3 [score] => 0.30750848701619 ) [2] => Array ( [pk] => 211 [category_id] => 8 ====>>> WRONG!!! [id] => 2 [score] => 0.37152213415004 ) )
你能在category_id = 7上进行查询搜索吗? 提前谢谢。
答案 0 :(得分: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中:)
答案 1 :(得分:0)
您可以从查询中删除AND +category_id:7
,您想要的是过滤器,因为不需要+category_id:7
作为排名值。
我不知道如何使用Zend_Lucene
实现它,但在solr中,我曾经传递过fq参数,这可能会给你一个提示:)
过滤是一个限制搜索空间的过程,只允许将一部分文档用于搜索命中。您可以使用此功能实现搜索范围内的搜索结果。 Lucene带有各种内置过滤器,如BooleanFilter,CachingWrapperFilter,ChainedFilter,DuplicateFilter,PrefixFilter,QueryWrapperFilter,RangeFilter,RemoteCachingWrapperFilter,SpanFilter等(本地JAVA VERSION )过滤器可以传递给IndexSearcher的搜索过滤符合过滤条件的文档的方法。