1. iFind – новая технология
для полнотекстового поиска
Сергей Кудинов
Хабаровск, 2015
2. %Text (с версии 5.2)
• Типы данных %Text.*
• Новые SQL операторы %CONTAINS и %CONTAINSTERM
• Поддержка стемминга для английского, испанского, французского, итальянского,
немецкого, японского, португальского языков
• Поддержка индекса для нескольких слов (n-gram индексы)
• Поддержка «шумовых» слов
3. %Text.Russian (с версии 2007.1)
4
• Тип данных %Text.Russian
• Поддержка стемминга для русского языка на основе словаря А.А. Зализняка
– ~170 000 базовых словоформ
– ~3 000 000 словоформ
– ~ 50 Мб
• Доступен для скачивания
(http://intersystems.ru/cache/downloads/files/free_text_rus_search.zip)
6. Что такое iFind
Анализ
НЕТ поиска
%Text
Только поиск
НЕТ анализа
iFind
Мощный поиск
Семантический анализ
SQL
7. Типы индексов iFind
Basic
Простой поиск
Стемминг
Декомпозиция
Маска при
поиске
Позиционный
поиск
Поиск по
шаблонам и рег.
выражениям
Фактор ~2.5
Semantic
+
Поиск по
сущностям
(entities)
Маска при
поиске по
сущностям
Позиционный
поиск по
сущностям
Фактор ~4.5
Analitic
+
Поиск с
использованием
данных о
Semantic
Dominance,
Semantic
Proximity, Pathway
…
Фактор ~6
8. Применение iFind
• Системы документооборота
• CRM системы
• МИС
• Документация
• Поиск по log
• Пример использования %FunctionalIndex
9. Как работает iFind
Создается iFind
индекс для
%string
%characterstream
Текст
передается в
iKnow
Результаты iKnow
обрабатыватся
стеммингом,
декомпозицей,
сохраняются в
словарях iFind и
iFind и индексах
10. Как работает 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;
…
}
11. Как работает iFind – %FunctionalIndex
Функциональный индекс – это возможность определить пользовательскую структуру
индекса и функции поиска по этому индексу, которые будут доступны через SQL.
Необходимо определить 2 интерфейса:
1) Интерфейс сохранения изменений данных в индексе
– InsertIndex
– UpdateIndex
– DeleteIndex
2) Интерфейс поиска, доступный через SQL-процедуры
12. Как работает iFind – SEARCH_INDEX
Синтаксис:
SEARCH_INDEX([[schema-name.]table-name.]index-name[,findparam[,...])
• Используется с предикатом %FIND в выражениях WHERE
• Интерфейс поиска – потомок %SQL.AbstractFind
• SEARCH_INDEX вызывает метод index-nameFind() , возвращающий набор
значений.
• В SEARCH_INDEX опционально передаются параметры index-nameFind()
13. Как работает iFind – параметры поиска
Класс %iFind.Index.Basic
ClassMethod Find(pSearch, pOption, pLanguage)
As %Library.Binary [ CodeMode = generator,…, SqlProc ]
Параметры:
pSearch – выражение для поиска
pOption – опция поиска :
0 – поиск без использования стемминга
1 - поиск с использованием стемминга
2 - поиск c использованием декомпозиции
4 – поиск по шаблону
pLanguage – язык поиска
14. Использование 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 = "");
}
15. Использование 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)
17. Использование iFind
По словам и
базовым словоформам
word
*word, word*, *word*
Позиционный
(word ? ? word)
{word ? ? word}
Оператор МаскаТип поиска
По сущностям
< начало сущности
> конец сущности
<word,<word*word>,
*word>
() для слов
{} для сущностей
18. iFind - Заключение
iFind = Поиск+ iKnow + SQL
iFind работает со строками и символьными потоками
iFind = Только добавить индекс