Question

Comment sélectionner / supprimer tous les documents de Solr en utilisant la notion boolean NOT?

i.e. Comment supprimer tous les documents de Solr dont l'identifiant NE commence pas par A59?

Était-ce utile?

La solution

Utilisez - pour indiquer NOT .

Par exemple, pour interroger des documents dont l'id ne commence pas par A59, la requête serait: -id: A59 * , c'est-à-dire: / solr / select /? q = -id : A59 *

Pour supprimer par requête, envoyez la requête dans un message de suppression au gestionnaire de mise à jour, comme indiqué ici .

EDIT: NOT (tout en majuscule) peut également être utilisé comme opérateur booléen

Autres conseils

L'exclamation fonctionne aussi pour NOT, donc:

/solr/select/?q=!id:A59*

devrait fonctionner dans le cas ci-dessus.

Je ne crois pas qu'une suppression négative par requête fonctionne. Voir ce billet Jira: https://issues.apache.org/jira/browse/SOLR- 381

Ils disent qu’il existe une solution de contournement pour préfixer un:, mais je n’ai aucune chance avec cela.

Ceci ne fonctionne pas (idem avec NOT) java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar "-userid: *" java -jar /opt/solr/example/exampledocs/post.jar * .xml

Ajouter dans a: donne une erreur de syntaxe (idem avec NOT) java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar " ;:: -userid: * " java -jar /opt/solr/example/exampledocs/post.jar * .xml

SimplePostTool: version 1.4 SimplePostTool: POSTing args sur http: // localhost: 8983 / solr / update . SimplePostTool: FATAL: Solr a renvoyé une erreur # 400 Erreur lors de l'analyse de la requête Lucene SimplePostTool: version 1.4

avant de supprimer, veuillez vous assurer que les identifiants auxquels vous faites référence sont des chaînes et qu’ils ne seraient en aucun cas formés de deux termes combinés. La façon dont je le ferais consiste à lire les données de solr à partir d'un script et à effectuer une suppression singulière ou par lots, car cela fournit un meilleur contrôle et des validations sur chaque identifiant, ce qui réduit le risque de suppression incorrecte. Par conséquent 1 lit les données de solr à partir d’un script en utilisant / solr / select /? q = id: A59 *

2 vérifier et valider les identifiants

3 supprimez-les un par un ou dans un groupe de 10 identifiants à la fois

Cordialement

Rajat

Comme Mauricio a déclaré:

Utilisez le symbole - pour indiquer ce que vous souhaitez exclure dans votre requête. Les deux requêtes suivantes supprimeront tous les documents, à l'exception de ceux commençant par A59.

GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>

La première ligne effectue l'opération de suppression. La deuxième ligne fait le commit.

L'utilisation du symbole - devant les fichiers implique que cette valeur soit exclue. Le résultat sera le suivant: PAS égal

.

Voici un exemple de chaîne de requête url où. J'ai conservé le code & fq = -HQ_City_Code: MEL " ;,

.

Il ignorera tous les résultats contenant HQ_City_Code , valeur MEL .

http://localhost:8983/solr/HQ_SOLR_Hotels/select?q=*:*&fq=HQ_National_Code:TH&fq=HQ_TYPE:hotel_EN&fq=HQ_Country_Code:AU&**fq=-HQ_City_Code:MEL**&wt=json&indent=true
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top