Форум

Data.BG Форуми: Full-Text Search - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Full-Text Search

#1
Потребителят е неактивен   aalesund 

  • Група: Потребители
  • Мнения: 423
  • Регистриран: 10-June 07
  • Репутация: 31
Здравейте,
аз използвам Full-Text Search в mysql заявките, обаче забелязах нещо доста неудобно. Значи ако се търсят 2 или повече думи, примерно "дума1 дума2" този вид търсене вади резултати както само за дума1, така и само за дума2, така и за двете общо, лошото обаче е, че се сортират по азбучен рен, а аз искам да направя първо да вади резултати за двете думи общо, след това за всяка дума по отделно. Разбира се пак по азбучен ред да са, но първо да са по азбучен ред двете общо, след това да са по отделно азбучен ред.
Ето моя код, за да видите и ако може да ми кажете какво да променя, за да вади първо резултати за двете общо, след това и по отделно:
mysql_query("SELECT fileid, name, keywords, description
	FROM ". $tbl_prefix ."files USE INDEX (idx_search)
	WHERE MATCH(name, keywords, description) AGAINST('". $search_term ."' IN BOOLEAN MODE)". ($category !== 0 ? ' AND category = '. $category :'') ."  AND status = '1'
	ORDER BY name ASC LIMIT ". (($page - 1) * $settings['browse_per_page']) .", ". ($settings['browse_per_page'] + 1));

Значи аз съм задал сортиране по name по азбучен ред, но искам първо да изважда резултата ако и двете думи ги има по азбучен ред, след това да показва само за по едната, разбира се пак по азбучен ред.

Ето примерно какво става в момента при резултата:
А файл (намерено: дума 1)
Б файл (намерено: дума 2)
В файл (намерено: дума 1)
Г файл (намерено: дума 1 и дума 2)
Д файл (намерено: дума 1)
Е файл (намерено: дума 1 и дума 2)
Ж файл (намерено: дума 2)

Ето аз как искам да се вадят резултатите:
Г файл (намерено: дума 1 и дума 2)
Е файл (намерено: дума 1 и дума 2)
А файл (намерено: дума 1)
В файл (намерено: дума 1)
Д файл (намерено: дума 1)
Б файл (намерено: дума 2)
Ж файл (намерено: дума 2)

Надявам се ме разбрахте какво имам предвид.

Мнението беше редактирано от aalesund: 22.03.16 - 15:39

0

#2
Потребителят е неактивен   fightcska 

  • Група: Потребители
  • Мнения: 18448
  • Регистриран: 08-June 07
  • Репутация: 3161
  • Пол:Мъж

Цитат

mysql_query("SELECT fileid, name, keywords, description ,
( MATCH(name, keywords, description) AGAINST('". $search_term ."' IN BOOLEAN MODE) ) as relevance
FROM ". $tbl_prefix ."files USE INDEX (idx_search)
WHERE MATCH(name, keywords, description) AGAINST('". $search_term ."' IN BOOLEAN MODE)". ($category !== 0 ? ' AND category = '. $category :'') ." AND status = '1'
ORDER BY relevance DESC , name ASC LIMIT ". (($page - 1) * $settings['browse_per_page']) .", ". ($settings['browse_per_page'] + 1));


Подобно нещо ще ти изкара резултатите срямо т.н score от търсенето. Тоест MySQL колкото смята ,че резултата се доближава най-много до търсенето. Тоест ако ще ти изкарва резултатите с 2 думи най-отгоре , но с разлечен различен relevance и няма да можеш да ги сортираш по име. Full text не може да върне резултат с това колко думи имаш съвпадение. Ако не искаш да изгубиш сортирането по азбучен ред можеш да разгледаш http://dev.mysql.com...sam-ftdump.html как се ползва и да парсаваш резултата с PHP , тогава ще можеш да ги сортираш и по азбучен ред.
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login