2011-11-16 5 views
0

Je veux créer un autosuggest pour une recherche de texte intégral avec AJAX, PHP & MySQL.Backend pour autosuggest pour la recherche fulltext

Je cherche la bonne façon d'implémenter le backend. Pendant que l'utilisateur tape, le champ de saisie devrait lui donner des suggestions. Les suggestions doivent être générées à partir des entrées de texte dans une table.

Quelques informations pour cette entrys: Elles sont stockées dans le texte intégral, générées à partir de PDF avec 3-4 pages chacun. Il n'y a pas plus de 100 entrys pour l'instant et atteindra un maximum de 2000 dans les prochaines années.

Si l'utilisateur commence à taper, le mot qu'il est en train de taper doit être complété par un mot qui est stocké dans le DB, trié par occurrences décroissantes. La prochaine étape consiste à suggérer des combinaisons avec d'autres mots, qui ont une occurrence élevée dans les entrys correspondant au premier mot. Vous pouvez certainement le comparer à Google autosuggest.

Je pense à 3 façons différentes pour mettre en œuvre cette:

  1. générer un index via cronjob, sorcière compte les occurrences de mots et combinaisons pendant la nuit. L'utilisateur effectue une recherche sur cet index. Je fais une recherche en direct dans les entrys avec une fonction 'LIKE'% search% "'. Ensuite, je cherche le mot après le ceci et les GROUP par occurrence.

  2. Je crée un fichier journal pour toutes les recherches d'utilisateur, et recherche de bonnes combinaisons comme dans 1), afin que la recherche devienne plus intelligente avec chaque action de recherche.

Quelle est la meilleure façon de commencer avec cela? La recherche devrait être rapide et performante. Y a-t-il une meilleure possibilité à laquelle je n'ai pas pensé?

Répondre

0

J'utilise le MATCH mysql() CONTRE() (http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html), par exemple:

SELECT * 
FROM table 
WHERE MATCH(column) AGAINST('search') 
ORDER BY MATCH(column) AGAINST('search') 

un autre avantage est que vous pouvez encore modifier l'importance des mots recherchée (si nécessaire), comme:

MATCH(column) AGAINST('>important <lessimportant') IN BOOLEAN MODE 

Ou dire que certains mots du terme de recherche doivent être nécessaires, tandis que d'autres ne peuvent pas être présents dans le résultat, par exemple:

MATCH(column) AGAINST('+required -prohibited') IN BOOLEAN MODE 
+0

Bonne solution pour la recherche fulltext, mais avec cette solution, je récupère toute l'entrée. Je veux compléter des mots simples pour l'autosuggest. Comment puis-je obtenir des mots correspondant aux mêmes entrys? – xerxes

0

Je pense que l'idée n ° 1 est la meilleure. En passant, n'oubliez pas d'éliminer les mots d'arrêt de autosuggest (un, le, par, ...).