Автор Тема: Auto-complete  (Прочетена 1558 пъти)

ivo3d

  • Напреднали
  • *****
  • Публикации: 161
  • Distribution: Mint Linux
  • Window Manager: Gnome
    • Профил
Auto-complete
« -: Mar 06, 2011, 18:39 »
Здравейте,

не съм сигурен, че темата е точно за тук, тъй като не е свързана с някой конкретен език или техонология, а по-скоро е философски въпрос.

Общо взето имам една sql таблица в която има едни да ги наречем теми. Всяка тема си има заглавие, някакъв текст и тагове, коте се въвеждат ръчно - нещо като ключови думи. Таговете всъщност са в отделна таблица, но това не е от такова значение. Та, при търсене идеята ми е да има някакъв auto-complete, например ако въведа "либия", да излезе един списък с например "либия 2011", "либия протести", "либия кадафи", "либия муамар кадафи" и т.н... Според мен това би трябвало да идва от таговете. Някакви други предложения или връзки към система с готово решение? Мен не ме интересува програмното решение, това е лесно, това което ме притеснява е принципно откъде точно да идват тези предложения при търсенето.

Има и още един проблем - тъй като сайтът в момента работи с друга система, в която не са предвидени тагове, а вече има около 7000 теми, дали има някакъв начин, който ще доведе до що-годе приемливи резултати -  от заглавието примерно да извадя тези ключови думи, или ще се наложи да се използва хамалския метод, да се мине през всяка тема...

Благодаря ви!
Иво
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Auto-complete
« Отговор #1 -: Mar 06, 2011, 18:47 »
Абе да ти кажа не знам, ама 7000 записа не са много. Може да направиш един ALTER на таблицата и да си добавиш още една колона.

PS: Всъщност ще стане с таговете:
Код
GeSHi (SQL):
  1. SELECT * FROM tableName WHERE name LIKE '%.$searchVar.%';
и за всяка буква която е въведена и отива в $searchVar ще си пускаш още една заявка към базата (сега гледах как google са го направили - те генерират нов json за нова буква, която потребителя е въвел).
« Последна редакция: Mar 06, 2011, 18:56 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

ivo3d

  • Напреднали
  • *****
  • Публикации: 161
  • Distribution: Mint Linux
  • Window Manager: Gnome
    • Профил
Re: Auto-complete
« Отговор #2 -: Mar 06, 2011, 19:04 »
Това е самото търсене, аз за него ще използвам Lucene, защото таблиците са innodb, а ми трябва fulltext search. Тук няма проблеми, със самото търсене имам доста опит, въпроса ми при autocomplete предложенията които се извеждат, дали е най-добре да идват от таговете, или има и по-тарикатски начин, както и как от вече въведени теми без тагове да изгенерирам някакви смислени, което ми се струва общо взето невъзможно ако не се въведат на ръка. Пак казвам, става дума за предложенията от autocomplete полето, а не за резултатите от търсенето.
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Auto-complete
« Отговор #3 -: Mar 06, 2011, 19:09 »
Ми това дето нямаш тагове и питаш да си ги създадеш ръчно си зависи от информацията в тия теми. Аз много лесно мога да ти кажа да вземеш първата и/или втората дума от всяка тема и готово, може да се готвиш за адската каша :D.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Auto-complete
« Отговор #4 -: Mar 07, 2011, 12:22 »
Мисля, че ще е най-добре да си изгенерираш ключови думи (тагове) от съдържанието, което имаш в момента (в many-to-many таблица). Би било добре да си направиш списък подобен на stop-words в MySQL. Накрая прегледай ключовите думи ръчно и махни "паразитните", които си забравил да включиш в списъка.

Можеш да правиш и адаптация - в many-to-many междинната таблица сложи и поле за "тежест" - когато потребителят избере дадена опция, повишаваш "тежестта" на всички ключови думи от опцията (или нещо подобно).
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P