Полнотекстовый поиск в сообщениях отсортирован по уместности

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

Используя документы MySQL я создал этот запрос:

SELECT ID
FROM $wpdb->posts
WHERE MATCH (post_title, post_content) AGAINST ('$keyword_list')
AND post_status = 'publish'
AND post_type = 'issue'

Проблема A), Если я тестирую его с помощью ключевого слова (слов), которое появляется многократно в моих тестовых сообщениях, это действительно находит те сообщения, но это не отсортировано правильно уместностью. Например, первые найденные сообщения имеют приблизительно 3 происшествия ключевого слова, в то время как сообщения, возвращенные на 3-м месте, имеют примерно 15 происшествий.

Проблема B) существует два сообщения, которые содержат ключевое слово "Медикэр", если я ищу "Медикэр", это действительно возвращает те сообщения, однако когда я ищу "medi", "медик" и т.д., это ничего не возвращает.

Есть ли способ запросить его с помощью СООТВЕТСТВИЯ/ПРОТИВ, или сделать я должен использовать КАК % - в этом случае, как отсортировать по уместности.

Спасибо

3
03.07.2011, 17:49
3 ответа

Можно хотеть проверить поисковую систему Сфинкса http://sphinxsearch.com/

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

1
19.02.2020, 22:20

Это не решит проблему B, но до проблемы A: Я не думаю полнотекстовые поиски автоматически вид уместностью. Я вполне уверен, необходимо выбрать "ПРОТИВ" пункта AS что-то для ровного получения уместности в результаты. Как:

... WHERE MATCH (post_title, post_content) AGAINST ('$keyword_list') as relevance ...
... ORDER BY relevance

Но я также согласился бы с Aleh: при поиске сложного поиска Вам, вероятно, будет нужно что-то разработанное с этой целью, как Сфинкс.

0
19.02.2020, 22:20

Это может или не может быть важно в Вашем случае, но FULLTEXT ищите работает очень странно, когда нет особого текста для поиска против. Это - действительно боль в шее для тестирования на небольшом наборе данных. Можно хотеть попробовать булев режим, когда Вы работаете с небольшим текстовым набором данных.

Необходимо попробовать...

 WHERE MATCH (post_title, post_content) 
       AGAINST ('keyword keyword keyword' IN BOOLEAN MODE)

Точка @MathSmath об упорядочивании уместностью также корректна.

0
19.02.2020, 22:20

Теги

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