0

Drupalモジュールでプログラムで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');

しかし、これらはどれも機能していません。フィルタとして追加しているフィールドにサブストリングが存在し、インデックスが付けられていることがわかっていても、空のセットが返されます。apachesorl viewsモジュールを介して、検索インデックスにそのフィールドが入力されており、サブストリングが存在することを確認しました。

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

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

4

2 に答える 2

3

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

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

ここで、ss_* はパターンです。
ss_* -> 文字列
is_* -> 整数
im_* -> 整数、多値

その後、
1. インデックスを削除する - admin/settings/apachesolr/index
2. コンテンツを再インデックス化する
3. cron を実行する
4. 作成したフィルターを確認する - admin/reports/apachesolr/index

次に、フィルターを追加できます

$query->addFilter("ss_your_field_name", "value");

これがお役に立てば幸いです。

于 2012-05-08T07:11:01.317 に答える
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");
}
于 2012-05-15T07:36:41.133 に答える