web-dev-qa-db-fra.com

Filtre Apache Solr basé sur les valeurs du tableau

Quelqu'un a-t-il réussi à filtrer les valeurs des tableaux à l'aide d'Apache solr? J'ai des nids en tant que tableau, par programme, je veux utiliser le tableau pour filtrer le solr en fonction de 'entity_id'.

J'ai essayé quelque chose comme

  $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();

Mais je n'obtiens pas les résultats souhaités, quelque part le module apachesolr_search ou apachesolr semble ajouter des guillemets aux valeurs du filtre, quelque chose comme

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

Je l'ai finalement compris. Juste un petit changement à ce que Clive a suggéré résoudra le problème.

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

Le code ci-dessus me donne la réponse attendue, c'est-à-dire le résultat des nœuds 10915 et 11013.

J'espère que cela t'aides :)

3
Suresh R

addFilter ne peut pas deviner quelles sont vos intentions, donc il suppose que vous passez une valeur de chaîne pour le filtre - qui est ensuite correctement échappée afin que Solr n'interprète pas mal les caractères spéciaux comme faisant partie de celui-ci.

Si vous voulez une condition plus complexe, vous devez aller un peu plus manuellement:

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

(cela suppose que field:[x,y] est une syntaxe de requête Solr valide pour une opération IN, je ne sais pas si c'est le cas; vous devrez peut-être utiliser un OR de base à la place).

1
Clive