Как отсортировать результаты полнотекстового поиска MYSQL по релевантности

Я также получил эту ошибку с mod-mona apache. Похоже, что страница документации для webservice еще не реализована в Linux. Но webservice работает, несмотря на эту ошибку. Вы должны увидеть это, добавив ?WSDL в конец URL-адреса, т. Е. http: //localhost/WebService1.asmx? WSDL

23
задан Jason 19 June 2009 в 08:26
поделиться

4 ответа

SELECT * from vocabulary 
WHERE translation like 'word'  
union all
SELECT * from vocabulary 
WHERE translation LIKE '%word%' and translation not like 'word'  

сначала отобразит точные совпадения

15
ответ дан 29 November 2019 в 00:53
поделиться

LIKE - это не полнотекстовый поиск . В полнотекстовом поиске MATCH(...) AGAINST(...) возвращает оценку соответствия, которая может быть приблизительно аппроксимирована как релевантность.

29
ответ дан instanceof me 19 June 2009 в 08:26
поделиться

Я смотрел на ту же проблему и пока не нашел идеального ответа для моей ситуации, но это может быть полезно для вас. Я довольно новичок в полнотекстовом поиске, поэтому любые эксперты тоже мне помогут.

Я делаю два выражения MATCH () ПРОТИВ () в выборке и объединяю оценки каждого из них, чтобы сформировать общую релевантность. Назначение различных множителей позволяет мне настраивать важность каждого набора результатов.

Мой первый MATCH () проверял бы по буквальному (или точному) поисковому запросу, используя двойные кавычки. Мой второй MATCH проверял бы нормально. Я применяю более высокий множитель к первому совпадению, поэтому он должен иметь более высокое значение релевантности, если он найден.

Примерно так.

SELECT *, ((MATCH(indexes) AGAINST ('"search_terms"' IN BOOLEAN MODE) * 10)  
           + (MATCH(indexes) AGAINST ('search_terms' IN BOOLEAN MODE) * 1.5)) AS relevance  
FROM ...
WHERE ...  
      AND (MATCH (indexes) AGAINST ('"search_terms"' IN BOOLEAN MODE) > 0  
           OR MATCH (indexes) AGAINST ('search_terms' IN BOOLEAN MODE) > 0)  
      ...
ORDER BY relevance DESC

Если вы запустите функцию EXPLAIN, чтобы показать, как работает запрос, вы обнаружите, что дополнительные предложения MATCH () AGAINST () фактически не добавляют никаких накладных расходов к запросу из-за того, как работает MySQL.

5
ответ дан chrismacp 19 June 2009 в 08:26
поделиться

Вы можете получить хороший поиск по релевантности, создав полнотекстовый индекс, а затем сопоставив его с вашим поисковым запросом.

Так что что-то вроде этого должно работать.

ALTER TABLE `vocabulary` ADD FULLTEXT INDEX `SEARCH`(`translation`);

SELECT *, MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE) AS relevance 
FROM `vocabulary`
WHERE MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE)
ORDER BY relevance DESC

Более подробную информацию можно найти найдено в Справочном руководстве MySQL .

ALTER TABLE `vocabulary` ADD FULLTEXT INDEX `SEARCH`(`translation`);

SELECT *, MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE) AS relevance 
FROM `vocabulary`
WHERE MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE)
ORDER BY relevance DESC

Дополнительную информацию можно найти в Справочном руководстве MySQL .

ALTER TABLE `vocabulary` ADD FULLTEXT INDEX `SEARCH`(`translation`);

SELECT *, MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE) AS relevance 
FROM `vocabulary`
WHERE MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE)
ORDER BY relevance DESC

Дополнительную информацию можно найти в Справочном руководстве MySQL .

22
ответ дан 29 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: