2011-03-21 4 views
11

Comment pouvons-nous construire une requête pour rechercher un champ particulier pour être non nul?Lucene pas de requête?

field_name:* ne fonctionne pas. J'ai essayé field_name:[a* to z*] cela fonctionne très bien pour l'anglais, mais ne couvre pas toutes les langues.

Des suggestions alternatives?

Répondre

4

Ceci n'est actuellement pas supporté par Lucene. Voir this pour une discussion.

Une option alternative peut être de stocker une chaîne prédéfinie (comme nullnullnullnull) comme valeur de champ si elle est nulle. Ensuite, vous pouvez utiliser un filtre négatif pour supprimer ces enregistrements. (Je n'aime pas beaucoup cela, mais ne peux pas penser à une meilleure option)

0

Essayez field:[* TO *] ou field:["" TO *]. Mais il est probablement préférable d'utiliser un filtre pour cela.

+0

Essayé les deux, ne fonctionne. – Chandra

3

J'avais le même problème, mais il y a une propriété que vous pouvez définir sur l'analyseur de requête qui vous permet d'avoir des caractères génériques au début de un terme de recherche

queryParser.setAllowLeadingWildcard(true); 

Ce résolu le problème pour moi

S'il vous plaît voir Wildcard at the Beginning of a searchterm -Lucene

10

J'ai trouvé que cela fonctionne dans certains cas field:([0 TO 9] [a TO z])

-1

Je viens de commencer à jouer avec Lucene (via logstash élastique recherche) et trouve que cela semble fonctionner à partir de l'interface utilisateur de kibana. Je ne sais pas encore si c'est une intelligence en recherche élastique ou en kibana, je sais juste que la recherche élastique emprunte à la syntaxe lucene.

application:unit-test && !exception 

retournera tous les résultats de mes tests unitaires qui n'ont pas eu une exception

application:unit-test && exception 

renvoie ceux qui ont une exception non nulle indexée. de sorte que vous pouvez essayer juste

field 

ou

!field