2012-05-07 2 views
0

私はDrupalモジュール内でプログラム的にapachesolrクエリを作成していますが、いくつかの面で成功していますが、まだ他の人とは苦労しています。Apachesolrクエリ - フィールド内のテキストでフィルタリング

これまでのところ、私は特定のテキストを検索し、次のコードでによってフィルタリングされる条件に基づいて結果を制限することができ、クエリを構築することができました:

$subquery_region->addFilter('tid', $term->tid); 
$query->addFilterSubQuery($subquery_region, 'OR', 'AND'); 

私がしたいのですがどのようなノード内の特定のフィールド内に特定のテキストを見つけるためのフィルタを追加することによって、検索をさらに絞り込むことができます。誰でもこれを行うことができましたか?

私はオンライン研究してきましたと、このようなメインの検索クエリに直接

$query->addParam('fl', 'ss_my_field'); 
$query->addFilter("ss_my_field", "field_substring_to_search_for"); 

としてだけでなく、メインの検索に追加するサブクエリの中にそれを飛び出しをフィルタの追加など、さまざまな方法の多くを試してみましたクエリ

$subquery_test = apachesolr_drupal_query("Test"); 
$subquery_test->addParam('fl', 'ss_my_field'); 
$subquery_test->addFilter("ss_my_field", "field_substring_to_search_for"); 
$query->addFilterSubQuery($subquery_test, 'OR', 'AND'); 

しかし、これらのどれも動作していません。私はフィルターとして追加しているフィールドに部分文字列が存在することを知っていても、空のセットを返しています。インデックスが付けられています。私は、apacheorlビューモジュールを通して、検索インデックスにそのフィールドが設定され、部分文字列が存在することを確認できたことを確認しました。

構文やクエリの作成方法に問題はありますか?

特定のフィールド内でテキストを検索するフィルタを追加する方法が分かっている場合は、共有してください。それはaddFilter関数でさえできないかもしれませんが、これまでに私が試みてきたのはこれだけです。 ありがとう!

答えて

3

まず、特定のフィールドのインデックスを作成する必要があります。

function hook_apachesolr_update_index(&$document, $node) { 
    $document->ss_your_field_name = $node->your_field_name; 
} 

ここで、ss_ *はパターンです。管理/設定/ apachesolr /インデックス
2から
1にインデックスを削除するには、持っている後>整数、多値

から
SS_ * - >文字列
is_ * - >整数
im_ * 。再インデックスコンテンツ
3.実行するcron
4.チェックあなたが作成したフィルタ - 管理/レポート/ apachesolr /インデックス

その後、あなたはフィルタ

を追加することができます
$query->addFilter("ss_your_field_name", "value"); 

希望すると、これが役に立ちます。

+0

ラム、これまであなたの助けに感謝します。最初の部分はきれいに働いて、私のフィールドがインデックスに追加されたことがわかりました。ただし、記述されているようにaddFilter()関数でそれらを追加すると何も返されません。フォーマットに関する他のアイデア。私は私が今までに試したことのあるすべてを含めるように私の質問を編集しています... –

0
function hook_apachesolr_modify_query(&$query, &$params, $caller){ 
    $subquery = apachesolr_drupal_query(); 
    $subquery->add_filter("ss_my_field", "field_substring_to_search_for"); 
    $query->add_subquery($subquery, "AND"); 
} 
+0

ありがとう、ラム。それはまさに私が行ってきたことですが、私の質問にあるコードはDrupal 7バージョンのそれらの関数です。それはまだ私のために働いて100%ではありませんが、私はあなたに最初の答えを+1しました。再度、感謝します! –

関連する問題