web-dev-qa-db-ja.com

配列値に基づくApache solrフィルター

誰かが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
3
Suresh R

ようやくわかりました。 Cliveが提案したことを少し変更するだけで問題が解決します。

$query->addParam('fq', "entity_id:(10915 OR 11013)");

上記のコードは、予想される応答、つまりノード10915と11013の結果を返します。

お役に立てれば :)

3
Suresh R

addFilterはユーザーの意図を推測できないため、フィルターの文字列値を渡すことを前提としています。これは適切にエスケープされ、Solrが特殊文字をその一部として誤って解釈しないようにします。

より複雑な条件が必要な場合は、もう少し手作業で行う必要があります。

$query->addParam('fq', "entity_id:[10915 11013]");

(これはfield:[x,y]IN操作の有効なSolrクエリ構文です。代わりに基本的なORを使用する必要がある場合があります)。

1
Clive