αναζητηση με φραση σε πολλα cols

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

αναζητηση με φραση σε πολλα cols

Δημοσίευση από pimpogio » 18 Ιουν 2011 22:42

jpk κανεις μια σημαντικη παραληψη εδω...
για να κανεις αυτο που λες indexed objects list πρεπει να τραβηξεις ασκοπα ολες τις εγγραφες ακομα και για να δειξεις ενα subtree η ακομα και για δειξεις το path προς τον parent...
με τα αναδρομικα queries δεν το κανεις αυτο

πχ εxεις ενα γραφο με τα links του web και θες να μονο ενα subgraph θα εχεις μεγαλη χωρικη πολυπλοκοτητα αμα κατεβασεις κατω κατω ολο το γραφο για να κανεις αυτο που λες..

Δεν θελουμε μονο να δειχνουμε ολο το γραφο θελουμε και υπογραφους διαδρομες κτλπ

οσο για τα αεροπλανα λετε αυτο να ειτανε προβλημα στη βαση και το κρυβουνε? ;)
http://www.marketwatch.com/story/united ... atest_news

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jpk » 18 Ιουν 2011 22:58

Όταν έχεις έναν γράφο τον έχεις γενικότερα … π.χ. κατηγορίες .. σου ξαναείπα δείξε μου κάποιον άλλον αποδοτικότερο τρόπο απεικόνισης γράφου σε PHP ή ακόμα και σε JAVA και μαζί σου (πολύ θα ήθελα…).

Από εκεί και πέρα αν δεν έχει αντιπρόταση και αν το θέμα σου είναι πια engine χρησιμοποιείς στην MySQL θα ήθελα μέτρηση στο συγκεκριμένο πρόβλημα που ανέφερε το παλικάρι. Επειδή οι διαφορές εκεί είναι μικρότερες του χιλιοστού του δευτερολέπτου πρέπει να εξηγήσεις γιατί είναι σωστό προγραμματιστικά. ( στο άλλο που έλεγα είναι πάνω από 500 χιλιοστά του δευτερολέπτου σχεδόν μισό δευτερόλεπτο) . Όσο για τα αεροπλάνα και τις τράπεζες φίλε μπορούμε να πούμε πολλές θεωρίες συνομοσίας … αλλά ακόμα και αυτές λειτουργούν με VSAM, δεν τρέχει τίποτα που δεν ξέρεις τι είναι αυτό , και σου εύχομαι και να μην μάθεις, αλλά ok τι κάνεις εκτός από το να λες εξυπνάδες ; Ψάχνεις δουλειά pimpogio ; Τι δουλειά; Απλά περιφέρεις την γνώση σου ; Γιατί ;

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jpk » 18 Ιουν 2011 23:06

Με τις λέξεις «εξυπνάδες» φάνηκα κακός. Περιμένω μια απόδειξη σε κώδικα ότι κάτι ξέρεις που μιλάς τόσο για αναδρομικά queries PostgreSQL.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

αναζητηση με φραση σε πολλα cols

Δημοσίευση από pimpogio » 18 Ιουν 2011 23:14

ακου να σου πω ενα πραγματικο σεναριο
domain γυρευα να ... και σκευτηκα το συγκεκριμενο γραφο...
επρεπε να δω τα links ας πουμε με αυτο που λες επρεπε να κατεβαζω κατω ολο το γραφο..
αυτο ομως δεν γινετε..

και περα απο αυτο και σε μεγαλα δεντρα δεν ενδιαφερεσε να μπορεις να δειξεις ενα path
απο το φυλλο στο root η ενα μικρο subtree ?
γιατι να πρεπει να κατεβαζεις κατω ολες τις εγγραφες?
αμα εχεις αναδρομικα queries den χρειαζετε να κατεβασεις κατω ολες τις εγγραφες σε αυτες τις περιπτωσεις..

οσο για την innodb τα transactions kai τα fkeys ειναι αλλο θεμα δεν το λεω για ταχυτητα το λεω για ορθότητα / ευκολια και για ασφαλεια / ακεραιοτητα δεδομενων οχι για ταχυτητα.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jpk » 18 Ιουν 2011 23:25

pimpogio έγραψε:αμα εχεις αναδρομικα queries den χρειαζετε να κατεβασεις κατω ολες τις εγγραφες σε αυτες τις περιπτωσεις
Ακόμα και έτσι δώσε μου μια περίπτωση και να το μετρήσουμε και μετά να δούμε και την ποιότητα κώδικα ...

Δεν είναι κακό να παραδέχεσαι ότι κάνεις λάθος ... απλά μην ακούσω ξανά για αναδρομικά queries ... και για το engine της MySQL μπορεί και να έχεις δίκιο αλλά ελάχιστο νόημα έχει καθώς αν φτάσεις σε τέτοια σημεία "κίνησης" δεν είναι το θέμα η engine που έχεις.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

αναζητηση με φραση σε πολλα cols

Δημοσίευση από pimpogio » 18 Ιουν 2011 23:47

φτιαξε μια βαση ας πουμε
cats(id,pid,test) //με indexes
και βαλε πχ 1 μυριο εγγραφες σε μερικα επιπεδα πχ 3-6
βασικα αφου θα κανεις τη δοκιμη μην βαλεις τοσες..
ξεκινα απο λιγες ωστε να εχουμε και μια εικονα αναλογα τις εγγραφες..

και βρες το breadcrumb καποιου φυλλου

Κώδικας: Επιλογή όλων

WITH RECURSIVE tmp AS (
SELECT  c.*, 1 AS lvl FROM cats c WHERE id = ? -> το id του φυλλου
UNION ALL
SELECT cp.*, lvl + 1 FROM tmp JOIN cats cp ON cp.id = tmp.pid WHERE tmp.id!=tmp.pid
) SELECT  id, test FROM tmp ORDER BY lvl
δεν ξερω τη διαφορα μια που θα κανεις τη δοκιμη θα μας πεις...

ο κωδικας ειναι σιγουρα ποιο συντομος με αναδρομικα queries
και το λυνεις και επιτοπου στην db χωρις να μπλεξεις καθολου με php/java

το θεμα με τα αναδρομικα queries δεν εχω καταλαβει ακομα τι σχεση εχει με την innodb
εγω παντως δεν τα συσχετισα πουθενα ασε που στην mysql και innodb nα εχεις
αναδρομικα queries δεν μπορεις να εχεις.. δεν εχει αυτη τη δυνατοτητα η mysql..
τη δοκιμη θα την κανεις σε postgresql που υποστηριζει αναδρομικα..
Τελευταία επεξεργασία από το μέλος pimpogio την 19 Ιουν 2011 01:44, έχει επεξεργασθεί 1 φορά συνολικά.

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jmaz » 19 Ιουν 2011 00:30

λοιπον, δοκιμασα την λυση που λεει ο fafos, δεν ειναι ακριβως αυτο που θελω...

με Fulltext κλπ αυτο που κανει παραπανω απο το LIKE ειναι να ψαχνει ολες τις λεξεις χωρις καποια συγκεκριμενη σειρα.

π.χ. db record = λαδια αυτοκινητο

με fulltext αν γραψω :
αυτοκινητο λαδια -> θα το βρει
λαδια αυτοκινητο -> θα το βρει
αυτοκινητου -> δεν θα το βρει
με LIKE :
αυτοκινητο λαδια -> δεν θα το βρει
λαδια αυτοκινητο -> θα το βρει
αυτοκινητου -> δεν θα το βρει

Ομως με το LIKE μπορω να βαλω % ωστε αν ο χρηστης γραψει :
αυτοκινητου και αντικαταστησω το ου με % θα το βρει, υπαρχει κατι παρομιο για το fulltext? σαν μπαλαντερ * κλπ.

επισης με fulltext αν εχω 2 records
π.χ.
Α) λαδια αυτοκινητου
β) αλλαγη λαδια

και ψαξω για αλλαγη λαδια
θα βγαλει 1ο το β) και 2ο το α)

κανει sort αναλογα με το input, οποτε αν υπαρχει * ή % για το fulltext ειναι αυτο που θελω, απο θεμα ταχυτητας το ιδιο μου φαινεται (αλλα μονο εγω ανοιγω την σελιδα)


jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jmaz » 19 Ιουν 2011 00:45

pimpogio έγραψε:δες αυτο..
http://framework.zend.com/manual/en/zen ... ucene.html
Ωραιος!!

Βρηκα και την λυση σε αυτο που ειπα πριν!

πριν ειχα το εξης query :
SELECT * FROM a_table WHERE MATCH (category,subcat) AGAINST('αυτοκινητο λαδια')

με αυτο δουλευει κανονικα :
SELECT * FROM a_table WHERE MATCH (category,subcat) AGAINST('αυτοκινητ* λαδια' IN BOOLEAN MODE)

επισης αν καποιος αλλος θελει κατι παρομιο, μπορει να ψαξει για wildcard operators γιατι υπαρχουν και αλλες επιλογες για την αναζητηση.

ή εδω http://dev.mysql.com/doc/refman/5.0/en/ ... olean.html

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

αναζητηση με φραση σε πολλα cols

Δημοσίευση από pimpogio » 19 Ιουν 2011 01:21

jpk αμα κανεις τη δοκιμη φερε και ενα subtree
απο καπου μεσα στο δεντρο και μετρα το..

Κώδικας: Επιλογή όλων

WITH RECURSIVE tmp AS (
SELECT  id, pid, test, ARRAY&#91;id&#93; AS lvl FROM cats c WHERE id = ? <- to root id tou subtree
UNION ALL
SELECT c.id, c.pid, c.test, tmp.lvl || c.id FROM tmp JOIN cats c ON c.pid = tmp.id WHERE array_upper&#40;lvl, 1&#41; <= 10 &#41;
SELECT id, pid, test FROM tmp ORDER BY lvl;

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jpk » 19 Ιουν 2011 08:10

pimpogio έγραψε:το θεμα με τα αναδρομικα queries δεν εχω καταλαβει ακομα τι σχεση εχει με την innodb.
Καμία (από την στιγμή που η συζήτηση ξέφυγε από το θέμα την συνέχισα σε άποψη που έχει εκφραστεί στο παρελθόν αλλά δεν έχει τεκμηριωθεί) , φυσικά σε PostgreSQL θα είναι το ένα παράδειγμα του test, και αν «κολλήσω» (καθώς δεν έχω πραγματική εμπειρία από PostgreSQL) θα σε ρωτήσω το πώς pimpogio.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

αναζητηση με φραση σε πολλα cols

Δημοσίευση από jpk » 25 Ιουν 2011 17:17

Το συνεχίζω λίγο όχι από αντιπαράθεση αλλά μήπως προσφέρει τίποτα σε όποιον έχει διάθεση να ασχοληθεί.
Για το πώς ξεκίνησε δείτε σελίδα 3
pimpogio έγραψε: Αυτα που δεν μου αρεσουνε στη mysql ειναι η ελλειψη αναδρομικων ερωτηματων
Δεν θεωρώ ότι έχω κάνει καμία επιστημονική ανακάλυψη με το indexed objects list , είναι μια προγραμματιστική μεθοδολογία που έχω δει σε πολλές γλώσσες και για να εξελιχτεί σε αυτό που έχω παρουσιάσει επίσης πέρασε (και ξαναγύρισε) σε λίγες γλώσσες (σαν ιδέα ξεκίνησε από COBOL πήγε σε JAVA , PHP πάλι JAVA και ξανά PHP αλλά μην κουράσω με τέτοια)

pimpogio έγραψε: για να κανεις αυτο που λες indexed objects list πρεπει να τραβηξεις ασκοπα ολες τις εγγραφες ακομα και για να δειξεις ενα subtree η ακομα και για δειξεις το path προς τον parent...
με τα αναδρομικα queries δεν το κανεις αυτο


Αν η εφαρμογή σου δομείτε γύρω από ένα κεντρικό δέντρο τότε έχει νόημα να το έχεις «κατεβάσει». Αν θες να μιλήσουμε και για optimization επειδή αυτή η λίστα αντικειμένων δεν έχει να κάνει με τον χρήστη αλλά με την εφαρμογή , έχει νόημα να έχει application scope cashing (αν και έχω δείξει ότι και χωρίς αυτό πάλι συμφέρει).

Αν δεν δομείτε γύρω από ένα κεντρικό δέντρο και απλά θέλεις έναν γράφο σε self referenced για μόνο μια περίπτωση , πάλι μπορείς να το ορίσεις στον Assigner (την τάξη που δίνει τιμές στα αντικείμενα της λίστας, επειδή είναι prepared statements έχω πολύ μεγάλη αμφιβολία αν ένα recursive query θα το έκανε γρηγορότερα ακόμα και σε 10.000.000 εγγραφές &#8211;μένει να το δοκιμάσω-).
pimpogio έγραψε: Δεν θελουμε μονο να δειχνουμε ολο το γραφο θελουμε και υπογραφους διαδρομες κτλπ

Εδώ είναι ένα κεντρικό σημείο στο τι είδους γράφο μπορείς να έχεις. Αν παρατήρησες στο Indexed Objects List μπορείς να έχεις όσες σχέσεις θέλεις και να έχεις ορίσει αν είναι 1 προς 1 ή 1 προς πολλά (στην ουσία όταν μιλάμε για γράφο προγραμματιστικά αυτό καταλαβαίνω εγώ ότι εννοούμε , την πρόσβαση σε διάφορες συνδέσεις των αντικειμένων) . Αυτό φυσικά δεν μπορείς να το κάνεις με ένα recursive query.

pimpogio έγραψε: πχ εxεις ενα γραφο με τα links του web και θες να μονο ενα subgraph θα εχεις μεγαλη χωρικη πολυπλοκοτητα αμα κατεβασεις κατω κατω ολο το γραφο για να κανεις αυτο που λες..

Πιστεύω ότι στην προηγούμενη παράγραφο σου εξήγησα γιατί δεν μπορείς να έχεις ανάλογη χωρική πολυπλοκότητα με recursive query και στην πρώτη γιατί δεν χρειάζεται να «κατεβάσεις» όλες τις εγγραφές.

Αλλά για αυτό που λες «ενα γραφο με τα links του web» η ποιητική απάντηση είναι «όχι πως έχω το κλειδί του παραδείσου&#8230;» και για να το συγκεκριμενοποιήσω σίγουρα δεν έχω βρει κάποιο «άγιο δισκοπότηρο» για να αναπαραστήσεις και προσπελάσεις με ελάχιστους πόρους όλα τα links του web.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες