Полнотекстовый поиск

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
storm
OTRS Новобранец
Сообщения: 10
Зарегистрирован: 28 дек 2010, 16:12

Полнотекстовый поиск

Сообщение storm » 21 сен 2011, 14:22

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

Какие вообще условия полнотекстового поиска?

Чем отличается RuntimeDB от StaticDB. Я так понял, что на больших БД необходимо использовать последнее, так как скорость поиска увеличивается на 50% так как создаются индексы.

Версия OTRS 2.4.9.

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Полнотекстовый поиск

Сообщение merkushov » 09 янв 2013, 16:28

Кто нибудь изучал вопрос поиска в OTRS, действительно ли он ПОЛНОТЕКСТОВЫЙ или обычный LIKE ?

Меня интересует поиск по словосочетаниям, поддержка морфологии и синонимов.

Версия OTRS 3.1.6
Меркушов Виктор, perl программист

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Полнотекстовый поиск

Сообщение alexus » 09 янв 2013, 16:49

Что значит "действительно ПОЛНОТЕКСТОВЫЙ"? http://ru.wikipedia.org/wiki/%D0%9F%D0% ... 1%81%D0%BA.
В OTRS полнотексовый поиск идет по совпадению слова или фразы (можно использовать *) в ТЕКСТЕ темы или тела заметок внутри тикета.
Морфология и синонимы - вы это серьезно :) ?
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Полнотекстовый поиск

Сообщение merkushov » 09 янв 2013, 17:13

Да, я это серьёзно! ...про релевантность ещё забыл. Моё определение полнотекстового поиска ближе к англоязычной статье википедии http://en.wikipedia.org/wiki/Full_text_search
На дворе 2013 год, а в системе претендующей на мировое господство до сих пор поиск идёт по точному совпадению с поддержкой звёздочки как единственного wildcard'а. Это никуда не годится!

Мне интересен опыт пользователей по поиску тикетов и вопросов/ответов в уже налаженной системе. Кто-нибудь вообще поиском пользуется?
Меркушов Виктор, perl программист

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Полнотекстовый поиск

Сообщение alexus » 09 янв 2013, 18:05

Все-таки это не система управления контентом и требования к ней несколько ниже в части полнотекстового поиска. Полнотекстовый поиск - это только вспомогательная функция для продуктов такого класса, и даже мировые лидеры вряд ли могут похвастаться морфологией и релевантностью в базовом варианте.
Другая сторона вопроса - "критикуешь? Предлагай!" Мы готовы попробовать реализовать любое здравое и конструктивное предложение.
Что касается использования поиска, то основной фишкой на мой взгляд является возможность создания шаблонов поиска. Это позволяет фактически создавать динамические представления тикетов в дополнение к дашборду и просмотрам очередей, статусов и эскалаций.
А так поиском конечно пользуемся и других обучаем.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Полнотекстовый поиск

Сообщение merkushov » 10 янв 2013, 10:43

"Не согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай!" - хороший девиз. Реализовать я и сам могу. Мне нужен фидбэк и ещё мозг того кто разбирается чтобы посоветоваться.

Покопался в исходниках и вот что выяснил. Поиск в OTRS представляет собой обычный LIKE без учёта регистра. Довольно медленный на больших объёмах и глупый. Но зато универсальный для всего зоопарка поддерживаемых БД.

Код: Выделить всё

 -- пример запроса для поиска по тикетам
SELECT DISTINCT st.id, st.tn, st.create_time_unix FROM ticket st INNER JOIN queue sq ON sq.id = st.queue_id  INNER JOIN article art ON st.id = art.ticket_id  WHERE 1=1 AND (((LOWER(art.a_cc) LIKE LOWER('%\xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0%') ) ) OR ((LOWER(art.a_subject) LIKE LOWER('%\xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0%') ) ) OR ((LOWER(art.a_to) LIKE LOWER('%\xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0%') ) ) OR ((LOWER(art.a_body) LIKE LOWER('%\xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0%') ) ) OR ((LOWER(art.a_from) LIKE LOWER('%\xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0%') ) )) ORDER BY st.create_time_unix DESC

-- пример поиска по FAQ
SELECT i.id, count( v.item_id ) as votes, avg( v.rate ) as vrate FROM faq_item i LEFT JOIN faq_voting v ON v.item_id = i.id LEFT JOIN faq_state s ON s.id = i.state_id WHERE ((LOWER(i.f_number) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%')  OR LOWER(i.f_subject) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%')  OR LOWER(i.f_keywords) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%')  OR LOWER(i.f_field1) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%')  OR LOWER(i.f_field2) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%')  OR LOWER(i.f_field3) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%')  OR LOWER(i.f_field6) LIKE LOWER('%\xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb0%') ) ) AND s.type_id IN (1, 3, 2) GROUP BY i.id, i.f_subject, i.f_language_id, i.created, i.changed, s.name, v.item_id ORDER BY i.id DESC
Для поиска тикетов выдумано два режима RuntimeDB и StaticDB. Первый ищет по "живым таблицам". Второй режим включает поиск по специальной таблице article_search в которую скриптом bin/otrs.RebuildFulltextIndex.pl вносятся данные для поиска с небольшой обработкой (выкидывают маленькие слова и стоп-слова по захардкоженому в модуле списку).
Настройка режимов тут Core::FulltextSearch

Альтернатив несколько, но все со значительными доработками:
1. Полнотекстовый поиск PostgreSQL и MySQL пишут что есть поддержка релевантности, морфологии, синонимов. Но говорят что медленнее LIKE http://habrahabr.ru/post/25646/
2. Внешний движок полнотекстового поиска вроде Sphinx http://sphinxsearch.com/ или Lucene. ИМХО лучше Sphinx потому как субъективно лучше и отечественная разработка. Есть всё что нужно и к тому же очень быстрый поиск и индексация.
Меркушов Виктор, perl программист

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Полнотекстовый поиск

Сообщение merkushov » 10 янв 2013, 14:38

Вот нашёл качественный обзор http://lib.custis.ru/Сравнение_движков_ ... ого_поиска
Меркушов Виктор, perl программист

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Полнотекстовый поиск

Сообщение alexus » 10 янв 2013, 21:59

Ссылка не работает :(
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

Ответить