meet up khabarovsk_ifind
TRANSCRIPT
iFind – новая технология для полнотекстового поиска Сергей Кудинов
Хабаровск, 2015
%Text (с версии 5.2)
• Типы данных %Text.*
• Новые SQL операторы %CONTAINS и %CONTAINSTERM
• Поддержка стемминга для английского, испанского, французского, итальянского,
немецкого, японского, португальского языков
• Поддержка индекса для нескольких слов (n-gram индексы)
• Поддержка «шумовых» слов
%Text.Russian (с версии 2007.1)
4
• Тип данных %Text.Russian
• Поддержка стемминга для русского языка на основе словаря А.А. Зализняка
– ~170 000 базовых словоформ
– ~3 000 000 словоформ
– ~ 50 Мб
• Доступен для скачивания (http://intersystems.ru/cache/downloads/files/free_text_rus_search.zip)
iKnow (с 2012.1)
iKnow can
create
breakthrough
applications
knowledge
unstructured text
based on
hidden in
iKnow – технология для получения данных из неструктурированного текста
you
with
iKnow
Concepts
Relations
Paths
Dominance
Proximity
Summaries
Attributes
Что такое iFind
Анализ
НЕТ поиска
%Text
Только поиск
НЕТ анализа
iFind Мощный поиск
Семантический анализ
SQL
Типы индексов iFind
Basic
Простой поиск
Стемминг
Декомпозиция
Маска при поиске
Позиционный поиск
Поиск по шаблонам и рег. выражениям
Фактор ~2.5
Semantic
+
Поиск по сущностям (entities)
Маска при поиске по сущностям
Позиционный поиск по сущностям
Фактор ~4.5
Analitic
+
Поиск с использованием данных о Semantic Dominance, Semantic Proximity, Pathway …
Фактор ~6
Применение iFind
• Системы документооборота
• CRM системы
• МИС
• Документация
• Поиск по log
• Пример использования %FunctionalIndex
Как работает iFind Создается iFind
индекс для
%string
%characterstream
Текст передается в
iKnow
Результаты iKnow обрабатыватся
стеммингом, декомпозицей, сохраняются в
словарях iFind и iFind и индексах
Как работает iFind – класс индекса
Class %iFind.Index. Basic Extends (%Library.FunctionalIndex, %Library.CacheEmbedded) [ EmbeddedClass = %iFind.Find.Basic ]
{ Parameter FILER [ Internal ] = "iFind.Filer.Basic";
/// Language
Parameter LANGUAGE = “en";
/// 0 = No compounds and stems
/// 1 = Stems
/// 2 = Compounds
Parameter INDEXOPTION [ Constraint = "0,1,2" ] = 1;
Parameter LOWER = 1;
…
}
Как работает iFind – %FunctionalIndex
Функциональный индекс – это возможность определить пользовательскую структуру индекса и функции поиска по этому индексу, которые будут доступны через SQL.
Необходимо определить 2 интерфейса:
1) Интерфейс сохранения изменений данных в индексе
– InsertIndex
– UpdateIndex
– DeleteIndex
2) Интерфейс поиска, доступный через SQL-процедуры
Как работает iFind – SEARCH_INDEX
Синтаксис:
SEARCH_INDEX([[schema-name.]table-name.]index-name[,findparam[,...])
• Используется с предикатом %FIND в выражениях WHERE
• Интерфейс поиска – потомок %SQL.AbstractFind
• SEARCH_INDEX вызывает метод index-nameFind() , возвращающий набор значений.
• В SEARCH_INDEX опционально передаются параметры index-nameFind()
Как работает iFind – параметры поиска
Класс %iFind.Index.Basic
ClassMethod Find(pSearch, pOption, pLanguage)
As %Library.Binary [ CodeMode = generator,…, SqlProc ]
Параметры:
pSearch – выражение для поиска
pOption – опция поиска :
0 – поиск без использования стемминга
1 - поиск с использованием стемминга
2 - поиск c использованием декомпозиции
4 – поиск по шаблону pLanguage – язык поиска
Использование iFind
Описание индекса iFind
Class iFind.TestIndex Extends %Persistent
{
Property text As %String(MAXLEN = "");
Index iText On (text) As %iFind.Index(INDEXOPTION = 1,LOWER = 1) [ Type = bitmap ];
Property ref As %String(MAXLEN = "");
}
Использование iFind - SQL
SELECT ID,text
FROM ifind.testindex
WHERE ID %FIND ifind.testindex_itextfind(‘word',0)
или
SELECT ID,text
FROM ifind.testindex
WHERE ID %FIND SEARCH_INDEX(itextfind,'word',0)
Использование iFind
• Опции поиска:
– word ,*word , word* ,*word*
– (word word), (word ? word)
– <word , word> ,<word>
– <*word ,<word* ,<*word*
– *word> , word*> ,*word*>
– <*word> ,<word*> ,<*word*>
– {word word} ,<{word word} ,{word word}> ,<{word word}>
– '[a-zA-Z0-9]+(\.)?[a-zA-Z0-9]*@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}'
Использование iFind
По словам и базовым словоформам
word *word, word*, *word*
Позиционный (word ? ? word) {word ? ? word}
Оператор Маска Тип поиска
По сущностям < начало сущности
> конец сущности
<word,<word*word>, *word>
() для слов {} для сущностей
iFind - Заключение
iFind = Поиск+ iKnow + SQL
iFind работает со строками и символьными потоками
iFind = Только добавить индекс
Сергей Кудинов
Спасибо за внимание ! Вопросы ?
iFind – новая технология для полнотекстового поиска