web-dev-qa-db-fra.com

Solr - Comment créer une requête qui nécessite un champ Emplacement NOT NULL

J'ai un index Solr avec un ensemble de coordonnées stockées en tant que type Location; Je voudrais demander des documents où ce champ a une valeur non nulle.

Quelle est la syntaxe de requête pour effectuer la vérification NOT NULL sur un champ Emplacement?

26
STW

La voie canonique est la suivante:

fieldName:[* TO *]

Utilisant un '' sur le côté gauche, comme l'a suggéré Paige Cook, fonctionnera probablement aussi, mais je ne lui fais pas autant confiance que je le fais ci-dessus. Et comme il s'agit d'un champ Emplacement, vous devrez probablement le faire contre l'un des deux champs réels sous-jacents par rapport à ce champ composite logique. Ils commencent par fieldName et se terminent par une sorte de suffixe numérique; regardez dans le navigateur de schéma pour voir quel est le nom réel.

Une chose importante à savoir ici est qu'une requête comme celle-ci coûte cher à Solr, tout comme une analyse complète de l'index sur ce champ. Si vous avez de nombreuses valeurs de champ d'emplacement distinctes (des milliers de fois?), Alors c'est un gros problème. Si vous le faites dans une requête de filtrage, il sera mis en cache et c'est peut-être théorique. Si vous souhaitez que cette requête s'exécute rapidement, au moment de l'indexation, vous devez indexer un champ booléen pour indiquer s'il existe une valeur dans ce champ ou non.

43
David Smiley

Vous pouvez l'ajouter à votre requête fieldname:['' TO *]. Ce sera l'équivalent d'une vérification NOT NULL.

Je l'ai obtenu du post - Solr - Field Not Null Recherches

7
Paige Cook

Pour un champ d'emplacement (solr.LatLonType), utilisez la requête de filtre suivante: -fieldName:[-90,-180 TO 90,180] (les coordonnées en dehors de cette plage sont toujours invalides)

4
mirelon