2009-11-02 40 views
1

我试图做一个布尔搜索'sname:'。$ user-> name'。 OR sname:xxxxxx; ,我没有得到任何结果,因为sname:xxxxxx;工作正常。我甚至用查询修改钩子添加了mm = 1。有人可以指导我如何做到这一点。如何在apache solr中进行布尔搜索

这里是我的代码.....

$keys = ""; 
$filters = 'sname:'.$user->name.' OR sname:xxxxxx; 
//print($filters); 
$solrsort = variable_get('apachesolr_search_taxonomy_sort', 'created desc'); 
$page = isset($_GET['page']) ? $_GET['page'] : 0; 
$_GET['retain-filters'] = 1; 

try { 
//stolen from search.module (search_data) 
$data = apachesolr_search_execute($keys, $filters, $solrsort, 'search/apachesolr_search', $page); 
$results = theme('search_results', $data, $type); 
} catch (Exception $e){ 
watchdog('apachesolr', t('Error running search')); 
} 

function reports_apachesolr_modify_query(&$query, &$params, $caller) { 
// I only want to see articles by the admin! 
$params['mm'] = 1; 
} 

进阶感谢。

回答

1

$ user对象在某些地方不可用,因此它取决于您从哪里调用它。您需要全局调用它。将以下内容添加到代码的顶部。

$keys = ""; 
global $user; //Add this line 
$filters = 'sname:'.$user->name.' OR sname:xxxxxx'; 

另请注意,您错过了xxxxxx后的结束引号。我在上面的代码中添加了它。

+1

感谢ü的回答,但问题是不与用户对象,问题是使用Apache Solr实现的dismax查询生成器。 – pmarreddy

+0

Aww无赖。我们担心我对Apache Solr语法不太了解,所以我不能真正帮助。 – theunraveler

0

您是否尝试删除第二个sname:?我SOLR过滤器看起来像:

(fname:carrie OR carol) 
AND 
(lname:miller OR jones)