2011-05-30 85 views
0

我有这样的脚本:SOLR和关键字

$removeList = array('+', '-', '&&', '||', '!', '(', ')', '{', '}', '[', ']', '^', '"', '~', '*', '?', ':', '\\'); 
$keyword = str_replace($removeList, '', mb_strtolower($_GET['query'], 'UTF-8')); 
$keyword_str = strlen($keyword);  

if($keyword_str>=3){ 
    $options = array('hostname' => '**.*.*.*','login' => '', 'password' => '', 'port' => 8080); 
    $client = new SolrClient($options); 
    $query = new SolrQuery(); 
    $query->setTerms(true); 
    $query->setTermsLimit(10); 
    $query->setTermsSort(1); 
    $query->setTermsField('keywords')->setTermsPrefix($keyword); 
    $updateResponse = $client->query($query); 
} 

这个脚本工作正常。但是,我怎样才能使它按类别搜索?

例如:我的var是$_GET['query'] = 'au'但我只想搜索cat = 2。现在它搜索整个数据库。我怎么能做到这一点?谢谢。

回答

0

您是否需要使用TermsComponent?如果没有,我的建议是通过使用SolrQuery::setQuery并在Solr的Query Syntax的帮助下在cat字段上设置一个静态过滤器来建立您的查询。

实施例:

<?php 

    /* ... */ 

    $query = new SolrQuery(); 
    $query->setQuery('(cat:2) AND (keywords:' . $keyword . ')'); 

    /* ... */ 

?> 

...或短形式使用SolrQuery构造:

<?php 

    /* ... */ 

    $query = new SolrQuery('(cat:2) AND (keywords:' . $keyword . ')'); 

    /* ... */ 

?>