2010-11-16 19 views
4

J'utilise le mode de correspondance SPH_MATCH_EXTENDED2 avec Sphinx 0.9.9 et je veux écrire une requête de recherche qui trouve tous les enregistrements qui ont quelque chose dans un champ particulier. Je l'ai essayé ce qui suit sans succès:Existe-t-il un moyen d'interroger Sphinx pour les enregistrements dont un champ particulier n'est pas vide?

@MyField * 
@MyField !"" 

Je figure que je peux ajouter un champ à mon index qui vérifie spécifiquement pour cela et requête contre cela, mais je préfère avoir plus de flexibilité que that-- ce serait vraiment bien de pouvoir le faire grâce à la syntaxe de la requête.

Des pensées?

Répondre

1

Vous pouvez le faire sans mettre à jour/modifier la base de données - juste en modifiant la sql_query à partir de laquelle votre index/source est construit. par exemple. Puis, à partir du commentaire d'une affiche précédente, utilisez simplement la négation dans la requête Sphinx. Vous pouvez également créer un attribut sphinx dynamique contre lequel vous pouvez filtrer. par exemple.

sql_query = SELECT id, \ 
       title, \ 
       IF(title!='',1,0) AS title_is_not_blank \ 
      FROM table 

sql_attr_uint = title_is_not_blank 

alors assurez-vous filtrez sur title_is_not_blank=1 pour chaque recherche. Ou, selon votre application, si vous jamais besoin de ceux avec un contenu vide, il suffit d'éliminer puis avec la clause sql_query WHERE. par exemple.

sql_query = SELECT id, \ 
       title \ 
      FROM table 
      WHERE title!='' 
0

Utilisez 2 index séparés; une avec toutes les données, une avec seulement des lignes qui ont des données dans cette cellule qui vous intéresse, vous pouvez ensuite spécifier l'index à utiliser lors de l'interrogation.

2

Easly, il suffit d'ajouter constante dans votre sql_query dans la configuration sphynx:

sql_query = SELECT `id`, `title`, 1 as `all` FROM table 

vous pouvez utiliser simplement interroger dans le mode de requête étendu:

@all "1" 

et il fonctionne