2010-09-17 3 views
0

J'ai cette expression qui fonctionne comme prévu dans la pensée Sphinx:Comment faire l'appariement des attributs dans le mode (pensant) sphinx extended2?

Customer.search :with => {:signer_id => 23} 

mais je dois écrire une expression avec OR de certains attributs, comme signer_id est 23 ou admin_level est 42, donc je me suis déplacé à correspondance prolongée le mode et a écrit ceci:

Customer.search "@signer_id 23", :match_mode => :extended2 

qui, selon ma compréhension du Sphinx relevant documentation, il devrait être équivalent, mais il ne correspond pas à rien du tout. Des idées que fais-je tort? Comment écrire une expression étendue de sphinx de pensée?

copié et collé à partir de la console:

ruby-1.8.7-p302 > Customer.search(:with => {:signer_id => 23}).count 
=> 20 
ruby-1.8.7-p302 > Customer.search "@signer_id 23", :match_mode => :extended2 
=> [] 
ruby-1.8.7-p302 > Customer.search("@signer_id 23", :match_mode => :extended2).count 
=> 0 

Update: fixé l'identifiant (32 -> 23).

Répondre

0

Je l'ai fait pour faire correspondre sur les champs que j'ai normalisé. Cela réduit la quantité de churn dans la base de données en ayant le même texte dans la recherche de texte intégral.

Interrogation: «pizza | @product_codes (965 | 1636 | 1848 | 2939 | 4227 | 5067 | 5735) | @brand_codes (1485) | @service_codes (2782)

Notez que les autres réponses indiquent que vous ne pouvez pas faire de propriétés de cette façon, il faut les indexer.

Je BRUTE les forcer comme ça:

 indexes '(select group_concat(products.id) from business_products inner join products on (products.id = business_products.product_id) where business_id = `businesses`.`id` group by business_id)', :as => :product_codes, :type => :integer 

De plus, vous aurez besoin de réduire le nombre de caractères dans un mot en définissant cette

min_word_len: 1 

Sinon, il ne correspond pas à votre 1 et les codes numériques à 2 chiffres.

+0

J'ai fait la même erreur et un jeu olympique de maths; ils ne pouvaient pas croire qu'un tel idiot comme moi l'ait vraiment gagné;) En tout cas, j'ai fait l'erreur seulement ici, le code était bon et ne fonctionnait toujours pas. – Pablo

+0

J'ai réécrit ma réponse ici. –

0

Je ne trouve pas la section dans les documents qui dit que vous pouvez utiliser la syntaxe @attribute value - c'est seulement pour les champs, pas pour les attributs. Au moins, c'est ma compréhension. Serait fantastique si je me trompe :)

+0

Quelle est la différence entre les champs et les attributs? – Pablo

+0

Les champs sont les données textuelles de vos enregistrements - c'est-à-dire: tous les mots qui doivent correspondre aux requêtes de recherche. Les attributs sont des entiers, des horodatages, des booléens, des flottants pour trier et filtrer les résultats. Lisez les sections sur les champs et les attributs sur cette page: http://freelancing-god.github.com/ts/fr/sphinx_basics.html – pat

+0

@pat Désolé pour avoir commenté un sujet de deux ans, mais n'êtes-vous pas l'auteur de ThinkingSphinx? C'est une réponse humble puissante pour le gars qui a écrit la chose! – Samo

Questions connexes