Attachment | Size |
---|---|
apache_solr_content_type_settings.PNG | 5.58 KB |
Apache solr/PHP solr client 可以使用的 development API 其實還有很多
這次介紹的是其中一個最常用的 hook_apachesolr_prepare_query()
<?php
function MODULE_NAME_apachesolr_prepare_query(&$query, &$params, $caller){}
?>
這個 hook 的用處是可以直接修改傳到 solr 的 query
例如用代碼增加只搜尋某一個 content type (其實 apachesolr_search 已經這一個選項, 見圖)
或者代碼增加 content type=='restanrant' OR taxonomy=='Food' 之類不可以在 views 中達成的複雜 search query
apachesolr 的search filters
prepare_query() 函數的參數 $query 是一個 object, README.txt 的例子中使用 add_filter()
可以新增 AND 的 filter,
也可以使用 add_subquery() 增加 OR 的 filter
$caller 是一組辦悉用的代號, 例如 apachesolr_search.module 的 search 中, $caller 是 apachesolr_search
因為其它模組也可以使用 apachesolr 的 API(上一篇已經提過), 可以區分其他開使用 apachesolr 的搜尋
例如一個自定搜尋的例子:
<?php
$temp_q = apachesolr_drupal_query();
$temp_q->add_filter("tid", $tid);
$cuisine_query->add_subquery($temp_q, 'OR');
?>
例如一個自定模組可以:
<?php
apachesolr_search_execute($kewords, '', 'score desc', '', 0, 'search_food');
?>
加上 hook_apachesolr_prepare_query, 'search_food' 便是 $caller 的值
可以專為 search_food 自定義合適的 filters
ref:
README.txt
query class implements Drupal_Solr_Query_Interface
interface Drupal_Solr_Query_Interface