MySearch - добавим капельку релевантности

В версии 1.1.29 добавлен некий элемент релевантности. Например, есть такие топики (перечислены в порядке их создания):

1. В тексте встречается слово «мама».
2. В тексте встречается фраза «мама мыла раму».
3. В тексте есть слова «мама», «рама».
4. И в тексте, и в заголовке встречается фраза «мама мыла раму».
5. В тексте встречается слово «рама».


Задаем поиск «мама мыла рам*».
В результатах топики будут выданы в таком порядке: 4, 2, 1, 3, 5

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

Модуль скачивать здесь: livestreet.ru/addons/74/

UPD По заявкам пользователей в версии 1.1.31 добавлен поиск по блогам — в названиях и описаниях блогов

21 комментарий

avatar
А не 4, 2, 3, 1, 5?

4. И в тексте, и в заголовке встречается фраза «мама мыла раму».
2. В тексте встречается фраза «мама мыла раму».
3. В тексте есть слова «мама», «рама».
1. В тексте встречается слово «мама».
5. В тексте встречается слово «рама».
avatar
Нет, таким изыскам поиск пока не обучен:
… потом те, где фраза целиком встречается в тексте, потом те, где встречается хотя бы одно из слов искомой фразы

Топики 1, 3, 5 для модуля равнозначны и там идет сортировка по порядку их создания.
avatar
Посмотрю, может что-то придумаю =)

Сиранно что дата оновления модуля стоит 3 августа, и пожалуйста добавте прямую ссылку livestreet.ru/addons/74/ =)
avatar
Да придумать не сложно, логика довольно простая. Но все это за счет утяжеления запроса, причем, чем больше слов в искомой фразе, тем кратно утяжеляется запрос. Поэтому все эти ограничения умышленно делаются.

Данное дополнение было введено исходя из такой простой логики: если юзер вводит три слова в фразе, то, скорее всего, он ищет именно фразу, а не просто слова.
avatar
Согласен что запрос может утяжелеть.

Ваш в код запроса:

ORDER BY
CASE WHEN (LOWER(t.topic_title) REGEXP '[[:<:]]предприятие[[:space:]]+для[[:>:]]') THEN 2 ELSE 0 END +
CASE WHEN (LOWER(tc.topic_text_source) REGEXP '[[:<:]]предприятие[[:space:]]+для[[:>:]]') THEN 1 ELSE 0 END DE t.topic_id ASC
LIMIT 0, 10


можно немного оптимизировать:

ORDER BY weight DESC, t.topic_id ASC LIMIT 0, 10
avatar
И то верно, поправлю
avatar
обновил поиск. теперь показывает только кол-во совпадений а сами топики нет :(
avatar
Попробуй поставить версию 1.1.30 и дай знать, как работает
avatar
За наимением наилучшего… сойдёт!
  • vist
  • 0
avatar
Если в результатах поиска есть опрос, то поле с текстом топика пустое, нельзя ли сделать что бы там что-то отображалось? :)
avatar
А покажите реальный пример. Если нет желания публично, то можно в личку
avatar
avatar
Строго следовал при установке поиска инструкции однако вот что выдало в итоге:

Notice: Use of undefined constant MYSEARCH_HOOK_ENABLE - assumed 'MYSEARCH_HOOK_ENABLE' in /home/www/lex.awardspace.us/classes/hooks/HookMysearch.class.php on line 18

Notice: Use of undefined constant MYSEARCH_HOOK_ENABLE - assumed 'MYSEARCH_HOOK_ENABLE' in /home/www/lex.awardspace.us/classes/hooks/HookMysearch.class.php on line 24
avatar
Это значит, что вовсе НЕ следовал строго. Не установлен файл config\modules\mysearch\config.php, либо там какой-то старый файл от старой версии. Указанная константа определяется именно в этом файле.
avatar
Кто-нибудь пробовал прикрутить этот поиск к версии 0.4 (svn)? Будет ли работать? Спасибо.
avatar
это для 0.3
avatar
А на 0.4 не пойдёт, не знаешь? Хотелось бы такой поиск для новой версии, которая вот-вот выйдет официально.
avatar
avadim автор этого модуля, и если он сказал, что это для 0.3 значит так оно и есть, но насколько мне известно он также собирается его перепиливать и для 0.4, так что ожидайте.
avatar
спасибо!
есть правда две хотелки:
1. поиск только для зарегистрированных
2. не искать внутри тегов, если в топиках присутствуют теги
avatar
Спасиб за модуль, кажется, нашел глюк или недоработку.
Делаю поиск по сайту по слову «Lineage» — слово подсвечивается
Делаю поиск по сайту по слову «Lineage 2» — подсвечивается только слово «Lineage»
Ставлю в конфиге поиск «MYSEARCH_MIN_LENGTH, 1» — подсвечиваются оба слова «Lineage 2»

Т.е. поиск по фразе, одно из слов в которой меньше значения «MYSEARCH_MIN_LENGTH, 3» не будет подсвечиваться.
avatar
Поиск идет по всем словам, которые встречаюися в фразе, и есть минимальная длина слова, которая задается в конфиге. Все же поиск чисто средствами MySQL — недешевое удовольствие (с точки зрения ресурсов), поэтому все вряд ли стоит задавть длину слова меньше 3
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.