誰かがApache solrを使用して配列値をフィルタリングすることに成功しましたか?私は配列としてnidを持っています。プログラムでは、配列を使用して、「entity_id」に基づいてsolrをフィルタリングします。
私は何かを試しました
$solr = apachesolr_get_solr();
$query = apachesolr_drupal_query("custom", array('q' => ''),'sort_label asc', 'search/site');
$query->addFilter('entity_id', '[10915 11013]');
$response = $query->search();
しかし、希望する結果が得られません。apachesolr_searchまたはapachesolrモジュールがフィルター値に次のような引用符を追加しているようです
webapp=/solr path=/select params={sort=sort_label+asc&start=0&q=&json.nl=map&wt=json&fq=entity_id:"[10915+11013]"&rows=10} status=500
ようやくわかりました。 Cliveが提案したことを少し変更するだけで問題が解決します。
$query->addParam('fq', "entity_id:(10915 OR 11013)");
上記のコードは、予想される応答、つまりノード10915と11013の結果を返します。
お役に立てれば :)
addFilter
はユーザーの意図を推測できないため、フィルターの文字列値を渡すことを前提としています。これは適切にエスケープされ、Solrが特殊文字をその一部として誤って解釈しないようにします。
より複雑な条件が必要な場合は、もう少し手作業で行う必要があります。
$query->addParam('fq', "entity_id:[10915 11013]");
(これはfield:[x,y]
はIN
操作の有効なSolrクエリ構文です。代わりに基本的なOR
を使用する必要がある場合があります)。