Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да манипулирам уместността на MySQL пълнотекстово търсене, за да направя едно поле по-ценно от друго?

Създайте три пълнотекстови индекса

  • a) един в колоната с ключови думи
  • б) един в колоната със съдържание
  • в) едно в колоната за ключови думи и съдържание

След това вашата заявка:

SELECT id, keyword, content,
  MATCH (keyword) AGAINST ('watermelon') AS rel1,
  MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC

Въпросът е, че rel1 ви дава уместността на вашата заявка само в keyword колона (защото сте създали индекса само за тази колона). rel2 прави същото, но за content колона. Вече можете да добавите тези два резултата за релевантност заедно, като приложите всяко претегляне, което желаете.

Въпреки това, вие не използвате нито един от тези два индекса за действителното търсене. За това използвате третия си индекс, който е и в двете колони.

Индексът на (ключова дума, съдържание) контролира вашето припомняне. Ака, какво се връща.

Двата отделни индекса (един само за ключова дума, един за съдържание) контролират вашата уместност. И можете да приложите свои собствени критерии за претегляне тук.

Имайте предвид, че можете да използвате произволен брой различни индекси (или да променяте индексите и тежестите, които използвате по време на заявка въз основа на други фактори, може би... само да търсите по ключова дума, ако заявката съдържа дума за спиране... намалете отклонението на тежестта за ключови думи, ако заявката съдържа повече от 3 думи ... и т.н.).

Всеки индекс използва дисково пространство, така че повече индекси, повече диск. И от своя страна, по-голям отпечатък на паметта за mysql. Освен това вмъкването ще отнеме повече време, тъй като имате повече индекси за актуализиране.

Трябва да сравните производителността (като внимавате да изключите кеша на заявките на mysql за сравнителен анализ, в противен случай резултатите ви ще бъдат изкривени) за вашата ситуация. Това не е ефективно за Google, но е доста лесно и "извън кутията" и почти сигурно е много по-добре от използването на "харесвам" в заявките.

Намирам, че работи много добре.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Миграции на живо с помощта на MySQL репликация

  2. Запазете PHP масив в MySQL?

  3. Постигане на MySQL Failover &Failback на Google Cloud Platform (GCP)

  4. MySQL ИЗГЛЕЖДАНЕ

  5. Сравняване на времената за отказ на прокси сървъра на базата данни - ProxySQL, MaxScale и HAProxy