philos Δημοσ. 7 Νοεμβρίου 2019 Δημοσ. 7 Νοεμβρίου 2019 (επεξεργασμένο) Έχω φτιάξει μια μηχανή αναζήτησης σε php και MySQL (με την LIKE). Θα ήθελα να τη βελτιώσω με τον εξής τρόπο: αυτή τη στιγμή για να εντοπίσεις κάτι, πρέπει να γράφεις την ακριβής λέξη (χρόνο, πρόσωπο, πτώση, γένος κτλ). Υπάρχει κάποιος τρόπος, πχ ακόμα και κάποια εξωτερική υπηρεσία που να βοηθήσει στο να βρεθούν τα σωστά αποτελέσματα; Σκεφτόμουν κάτι σαν υπηρεσία που επιστρέφει ρίζες λέξεων ή τις τάδε λέξεις σε άλλες πτώσεις και χρόνους κτλ, ώστε να μην είναι μόνο νταν ό,τι γράφει ο χρήστης. Μιλάω για Ελληνικά κυρίως και δευτερευόντως για Αγγλικά. Γενικά ψάχνομαι να βελτιώσω τη μηχανή σε αυτόν τον τομέα. Επεξ/σία 7 Νοεμβρίου 2019 από philos
Predatorkill Δημοσ. 8 Νοεμβρίου 2019 Δημοσ. 8 Νοεμβρίου 2019 Στις 7/11/2019 στις 4:27 ΜΜ, Click4Money είπε elasticsearch Και συγκεκριμενα https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
Επισκέπτης Δημοσ. 9 Νοεμβρίου 2019 Δημοσ. 9 Νοεμβρίου 2019 Full Text Search. Το έχουν όλες οι μεγάλες βάσεις δεδομένων και δουλεύει αρκετά καλά. Για περισσότερα εδώ: https://www.w3resource.com/mysql/mysql-full-text-search-functions.php
k33theod Δημοσ. 9 Νοεμβρίου 2019 Δημοσ. 9 Νοεμβρίου 2019 (επεξεργασμένο) Η php έχει επίσης αρκετές συναρτήσεις που βοηθάνε https://www.php.net/manual/en/function.levenshtein.php The Levenshtein distance is defined as the minimal number of characters you have to replace, insert or delete to transform str1 into str2. https://www.php.net/manual/en/function.soundex.php Soundex keys have the property that words pronounced similarly produce the same soundex key, and can thus be used to simplify searches in databases where you know the pronunciation but not the spelling. https://www.php.net/manual/en/function.metaphone.php Similar to soundex() metaphone creates the same key for similar sounding words. It's more accurate than soundex() as it knows the basic rules of English pronunciation. https://www.php.net/manual/en/function.similar-text.php This calculates the similarity between two strings as described in Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1). Μπορείς να συνδυάσεις τα παραπάνω. Στην db καλό ίσως θα ήταν να κάνεις indexing https://www.w3schools.com/sql/sql_create_index.asp Τα regexes έχουν πολύ μεγαλύτερη ευελιξία από το LIKE θα πρέπει όμως να παράγεις εσύ το regex με βάση τη λέξη και αυτό μπορεί να είναι περίπλόκο. Επεξ/σία 9 Νοεμβρίου 2019 από k33theod 1
possiz Δημοσ. 9 Νοεμβρίου 2019 Δημοσ. 9 Νοεμβρίου 2019 Μόνο elasticsearch (ή ανάλογο). Τα άλλα είναι για πέταμα, μην ασχοληθείς καν. 1
philos Δημοσ. 9 Νοεμβρίου 2019 Μέλος Δημοσ. 9 Νοεμβρίου 2019 Thanks παιδιά! Η μηχανή forum XenForo 2 που θα απευθυνθώ, έχει τελικά elasticsearch, οπότε όλα εντάξει!
nemesis345 Δημοσ. 12 Απριλίου 2020 Δημοσ. 12 Απριλίου 2020 Στις 9/11/2019 στις 12:24 ΜΜ, k33theod είπε Η php έχει επίσης αρκετές συναρτήσεις που βοηθάνε https://www.php.net/manual/en/function.levenshtein.php The Levenshtein distance is defined as the minimal number of characters you have to replace, insert or delete to transform str1 into str2. https://www.php.net/manual/en/function.soundex.php Soundex keys have the property that words pronounced similarly produce the same soundex key, and can thus be used to simplify searches in databases where you know the pronunciation but not the spelling. https://www.php.net/manual/en/function.metaphone.php Similar to soundex() metaphone creates the same key for similar sounding words. It's more accurate than soundex() as it knows the basic rules of English pronunciation. https://www.php.net/manual/en/function.similar-text.php This calculates the similarity between two strings as described in Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1). Μπορείς να συνδυάσεις τα παραπάνω. Στην db καλό ίσως θα ήταν να κάνεις indexing https://www.w3schools.com/sql/sql_create_index.asp Τα regexes έχουν πολύ μεγαλύτερη ευελιξία από το LIKE θα πρέπει όμως να παράγεις εσύ το regex με βάση τη λέξη και αυτό μπορεί να είναι περίπλόκο. Καλησπέρα φίλε @k33theod. Σχετικά με τις παραπάνω συναρτήσεις πλην της similar-text που ομολογώ πως δεν την είχα προσέξει, τις έχεις χρησιμοποιήσει και αν ναί, τις έχεις συνδυάσει κιόλας? Η ερώτηση μου προέχεται από την εμπειρία μου στην χρήση τους σε MySQL με FULLTEXT INDEX. Για ένα μεγαλο διάστημα έκανα και συνδυασμό των levenshtein και metaphone.
k33theod Δημοσ. 14 Απριλίου 2020 Δημοσ. 14 Απριλίου 2020 (επεξεργασμένο) Στις 12/4/2020 στις 10:43 ΜΜ, nemesis345 είπε Καλησπέρα φίλε @k33theod. Σχετικά με τις παραπάνω συναρτήσεις πλην της similar-text που ομολογώ πως δεν την είχα προσέξει, τις έχεις χρησιμοποιήσει και αν ναί, τις έχεις συνδυάσει κιόλας? Η ερώτηση μου προέχεται από την εμπειρία μου στην χρήση τους σε MySQL με FULLTEXT INDEX. Για ένα μεγαλο διάστημα έκανα και συνδυασμό των levenshtein και metaphone. Όχι δυστηχώς, οταν χρειάζομαι string matching ή κάτι τέτοιο το κάνω συνήθως με regex. Είχα κάνει ένα μικρό script/παράδειγμα πως μπορούσε ο @philos να τις χρησιμοποιήσει αλλά δεν χρειάστηκε και δεν το πόσταρα και τώρα δεν ξέρω που είναι. Χαίρομαι όμως που δεν προτιμούν όλοι τα έτοιμα και κάνουν κάτι δικό τους. Όπως βλέπω και από το site σου χρησιμοποιείς απλά πράγματα. 👍 Επεξ/σία 14 Απριλίου 2020 από k33theod
nemesis345 Δημοσ. 14 Απριλίου 2020 Δημοσ. 14 Απριλίου 2020 Καλά το site μου έχει μείνει σε πολύ πίσω και χρειάζεται μια σοβαρή ανανέωση, αλλά προς το παρόν τρέχω άλλα project οπότε μένει δυστυχώς πίσω. Σχετικά πάντως με την υλοποίηση, προτιμώ τον custom κώδικά. Μέχρι στιγμής δεν έχω θέματα, και αν ακολουθείς και τα όποια documentation υπάρχουν πάντα βγαίνει δουλειά. Στο σιτε μου πάντως μέσα υπάρχει η αναφορά στο έργο που χρησιμοποιώ τα παραπάνω. Το elastic πάντως το κοιτούσα λίγο στην αρχή, αλλά μιλάμε πριν περίπου 10 χρόνια, δεν με κάλυβε αλλά δεν μπορώ να θυμιθώ και τον λόγο! Less is more!
dovecotDev Δημοσ. 15 Απριλίου 2020 Δημοσ. 15 Απριλίου 2020 Να πω και εγώ πως συμφωνώ με τους παραπάνω που πρότειναν την elasticsearch. Μια τέτοια μηχανή είναι μονόδρομος για σωστή και γρήγορη αναζήτηση γλώσσας. Εδώ είναι και οι ανταγωνιστές της elasticsearch: Apache Solr Lucene Sphinx κλπ... Προσοχή, γιατί κάποιες μηχανές θέλουν 64GB μνήμη για να τρέξουν, μπορεί να είναι πολλά για PC στο σπίτι αλλά όταν ένα σερβεράκι z15 έχει μέχρι και 40TB μνήμη... τα 64GB είναι μια σταγόνα στον ωκεανό.
nemesis345 Δημοσ. 15 Απριλίου 2020 Δημοσ. 15 Απριλίου 2020 Δράττομαι της ευκαιρίας και αναφέρω το εξης. Μετά από σχεδόν 7 χρόνια που είχα κάνει πρόταση για να αλλάξω αρκετά πράγματα σε σχέση με τον σχεδισμό της βάσης αλλά και του τρόπου λειτουργίας της μηχανής αναζήτησης, μου έγινε πρόταση για αλλαγή της δομής της βάσης με την χρήση json data columns και πιθανόν την ενσωμάτωση της Apache Slor για προσέγγιση αναζήτησης Vector Space Model. Κάθε σχόλιο δεκτό! 55 λεπτά πριν, dovecotDev είπε Να πω και εγώ πως συμφωνώ με τους παραπάνω που πρότειναν την elasticsearch. Μια τέτοια μηχανή είναι μονόδρομος για σωστή και γρήγορη αναζήτηση γλώσσας.... Δεν ξέρω αν είναι απαραίτητα μονόδρομος. Νομίζω πως περισσότερη σημασία έχει το πλήθος των εγγραφών που καλείται να γίνει η αναζήτηση καθώς επίσης και το πόσο μεγάλα σε πλήθος λέξεων φράσεων είναι τα περιεχόμενα των στηλών που κάνεις τα queries.
dovecotDev Δημοσ. 15 Απριλίου 2020 Δημοσ. 15 Απριλίου 2020 Δεν θα μπω θεωρία της αμπελοφιλοσοφίας, πόσα δεδομένα τι δεδομένα κλπ. Θεωρώ προφανές ότι ξέρεις τι δεδομένα έχεις και ποιες είναι οι ανάγκες σου. 1
nemesis345 Δημοσ. 15 Απριλίου 2020 Δημοσ. 15 Απριλίου 2020 @dovecotDev, εννοείτε πως ξέρει ο καθένας τι έχει, τι ανάγκες θέλει να καλύψει κλπ, κλπ και ανάλογα επιλέγει την μέθοδο που του ταιριάζει!
k33theod Δημοσ. 15 Απριλίου 2020 Δημοσ. 15 Απριλίου 2020 Ειναι το elasticsearch καταλληλο εργαλειο για να κανεις αναζητηση σε mysql? Απο οτι διαβαζω ειναι για unstructured data.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα