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
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 :)
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).