FullTextSearch в MYSql - PullRequest
0 голосов
/ 21 марта 2012

В полнотекстовом поиске mysql совпадение дает некоторые значения, я не знаю, какое из них упомянуто этими значениями?Мне нужен результат сравнения в процентах? Как я могу добиться этого?

ВЫБЕРИТЕ id, title, body, MATCH (title, body) ПРОТИВ ('база данных') ИЗ статей WHERE MATCH (заголовок, body) ПРОТИВ ('database');

Вывод:

id',   'title',                    'body',                     'MATCH'
1, 'MYSql Tutorial', 'My Sql is one of the database language', 0.93769526481628
10, 'MySQL vs. YourSQL', 'In the following database comparison ...', 0.93769526481628
6, 'MySQL Tutorial', 'DBMS stands for DataBase ...', 0.92749810218811

1 Ответ

1 голос
/ 21 марта 2012

Я думаю, вы имеете в виду, что вы хотите актуальность, а также результат.Это будет выглядеть примерно так:

SELECT id, title, body, MATCH(title, body) AGAINST ('database') as Relevance FROM `articles` WHERE MATCH(title, body) AGAINST ('database' IN BOOLEAN MODE) ORDER BY `Relevance` DESC

edit Я неправильно понял вопрос.Вот список всех релевантностей в процентном выражении:

SELECT a.id, a.title, a.body, 
MATCH(a.title) AGAINST ('database') as titleRelevance, 
MATCH(a.body) AGAINST ('database') as bodyRelevance,
MATCH(a.title) AGAINST ('database')/c.maxTitleRelevance *100 AS percentageTitleRelevance,
MATCH(a.body) AGAINST ('database')/d.maxBodyRelevance *100 AS percentageBodyRelevance,
c.maxTitleRelevance + d.maxBodyRelevance AS maxTotalRelevance,
(MATCH(a.title) AGAINST ('database')+MATCH(a.body) AGAINST ('database'))/(c.maxTitleRelevance + d.maxBodyRelevance)*100 AS percentageTotalRelevance
FROM `articles` a, 
(SELECT MAX(MATCH(b.title) AGAINST('database')) as maxTitleRelevance FROM articles b LIMIT 1) c,
(SELECT MAX(MATCH(b.body) AGAINST('database')) as maxBodyRelevance FROM articles b LIMIT 1) d
WHERE MATCH(a.title, a.body) AGAINST ('database' IN BOOLEAN MODE)

Это может быть легче прочитать в следующей скрипте.http://sqlfiddle.com/#!2/c7885/14 Полнотекстовый поиск в MySQL в лучшем случае ненадежен.Если база данных слов находится не менее чем в 50% строк базы данных, она будет игнорироваться как общее стоп-слово, если вы не укажете логический режим, как в запросе выше.С точки зрения того, как вычисляется релевантность, я боюсь, что не могу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...