Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Всем привет! Fb версия 2.5
Необходимо реализовать полнотекстовый поиск.
Много данных не будет (сделать диплом и забыть). Я, отношусь к "среднячку" - хотел бы разобраться, но если кто сделает за меня - заплачу.
Смотрел по форуму, в основном используют udf и сторонние библиотеки(sphinx). У меня в рамках диплома не большой проект, а написать самому такую процедуру, не хватает знаний.
С формы приходят имя, фамилия
Есть представление, в котором:
Имя,
Фамилия,
Дата рождения
Нечёткий поиск по имени и фамилии,(рус и en).
P.s. уж извините за неправильное использование терминологии😪
16 мар 19, 11:51    [21834526]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
AltHasp
Member

Откуда:
Сообщений: 98
Alepawka,
Если речь идёт по "нечётком поиске", то лучше испольовать Postgres так как уже есть эти функции "в коробке".
16 мар 19, 16:42    [21834658]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28015
Alepawka,

как можно диплом на такой мифической хрени делать. Я понимаю, лет 20 назад. Но сейчас-то...
16 мар 19, 18:49    [21834749]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Vlad F
Member

Откуда:
Сообщений: 816
AltHasp
Alepawka,
Если речь идёт по "нечётком поиске", то лучше испольовать Postgres так как уже есть эти функции "в коробке".

Да, но его использовать, то тогда, считай, и делать, вообще ничего не надо, - даже на курсовую не тянет.))
16 мар 19, 20:32    [21834829]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
AltHasp,
Спасибо за совет, но задача стоит использовать FB) поэтому надо как то выкручиваться 😀
17 мар 19, 01:03    [21835007]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
BorodaOleg
Member

Откуда:
Сообщений: 30
LIKE тебя чем-то не устраивает?
22 мар 19, 14:50    [21840850]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2783
Alepawka, самый простой но очень медленный способ, это что-то типа
SELECT ...
  FROM mytable
  WHERE mytable.field CONTAINING :first_name
    AND mytable.field CONTAINING :last_name
    AND mytable.field CONTAINING :middle_name

Чтобы сделать правильно, необходимо создать справочник встречающихся слов, где каждому будет сопоставлен идентификатор, а заполняться уникальными словами этот справочник будет при парсинге контента, отбрасывая все предлоги, начинающиеся с маленькой буквы (чтобы случайно не отбросить такие фамилии как "По" или "И") и знаки препинания.
Далее, каждому документу необходимо сопоставить набор идентификаторов слов из справочника, после чего введенные в поисковую строку слова можно будет найти в справочнике слов, взять их идентификаторы и по таблице сопоставления идентификаторов слов документу найти документы, где эти слова встречаются.
22 мар 19, 15:37    [21840931]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

22.03.2019 15:37, rdb_dev пишет:
> Чтобы сделать правильно, необходимо создать справочник встречающихся слов

садись.
тебе 2.

зы: ты вообще не программист.

Posted via ActualForum NNTP Server 1.5

22 мар 19, 16:02    [21840987]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2783
Мимопроходящий
22.03.2019 15:37, rdb_dev пишет:
> Чтобы сделать правильно, необходимо создать справочник встречающихся слов

садись.
тебе 2.

зы: ты вообще не программист.
Ну-ка, ну-ка... Почитаем вариант иксперта. 😏
22 мар 19, 16:39    [21841057]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15875
rdb_dev,

Толсто намекну. Твой мегапоиск не будет работать ни на чём, кроме текстов типа "мой твой не понимать".
22 мар 19, 17:20    [21841142]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
__Avenger__
Member

Откуда:
Сообщений: 1984
А поискать? Сообщение 11351770 19217105
22 мар 19, 21:56    [21841350]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2783
WildSery
rdb_dev,
Толсто намекну. Твой мегапоиск не будет работать ни на чём, кроме текстов типа "мой твой не понимать".
Для диплома этого более чем достаточно. Не загонять же в БД весь словарь со склонениями существительных и временами глаголов... Кстати, по началу, все известные поисковые системы, существующие с 90-ых, именно так и работали - моя твоя "не понимать".
23 мар 19, 18:41    [21841745]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
__Avenger__,

Уже видел вашу реализацию поиска, но у вас библиотеки на windows.
А у меня linux
25 мар 19, 10:02    [21842460]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
__Avenger__,

А по поводу sphinx
Буду пытаться устанавливать)
25 мар 19, 10:05    [21842461]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9634
Alepawka,

трудно в FPC UDF перекомпилировать? Я не про ту где со сфинксом, а ту что попроще
25 мар 19, 10:07    [21842462]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

25.03.2019 10:07, Симонов Денис пишет:
> трудно в FPC UDF перекомпилировать? Я не про ту где со сфинксом, а ту что попроще

дык, тут программист нужен... (С)

Posted via ActualForum NNTP Server 1.5

25 мар 19, 11:57    [21842579]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15875
rdb_dev
Кстати, по началу, ...
А раньше перфокарт и "бармалея" были штыри. Кстати, о чём это мы?
25 мар 19, 13:50    [21842755]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2783
WildSery
Кстати, о чём это мы?
Мы о том, как привязать к документу список встречающихся в нём слов по справочнику этих слов. С помощью каких методов сравнения определять эти слова по поисковой строке, это уже другой вопрос.
25 мар 19, 14:38    [21842830]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15875
rdb_dev,

Т.е. сначала мы создадим словарь, а потом будем думать, как и зачем его применить. Ничего не перепутал?
25 мар 19, 15:48    [21842916]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2783
WildSery, предлагаешь хранить в базе BLOB'ы полных документов и на каждый запрос поиска целиком их перелопачивать в поисках похожих слов из заданной строки поиска? Ты реально полагаешь, что поисковые системы именно так и работают?
25 мар 19, 15:57    [21842920]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15875
rdb_dev,

Ничего я не предлагал. Разумные предложения были от других авторов.
А твоё предложение мне не понравилось тем, что похоже на залипуху "вдруг прокатит" для сдачи зачёта, для дипломной же работы вряд ли проканает.
25 мар 19, 16:09    [21842935]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
__Avenger__
Member

Откуда:
Сообщений: 1984
Еще тут обсуждалось - триграмный индекс
25 мар 19, 16:45    [21842973]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Vlad F
Member

Откуда:
Сообщений: 816
__Avenger__,

Да не по зубам ему ничего из этого, - неужели до сих пор не понятно??
25 мар 19, 17:56    [21843038]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис
Alepawka,

трудно в FPC UDF перекомпилировать? Я не про ту где со сфинксом, а ту что попроще


Трудно. Там Делфи.
Это надо разобраться в Делфи
И уже переписывать.
Вы не поможете мне?
Если надо, я заплачу
3 апр 19, 10:34    [21851008]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9634
Alepawka,

ты пробовал? Если да, пиши какие ошибки возникли. Если нет, то сначала поставь Lazarus 2.0 и попробуй.
Что не получится, то поможем адаптировать
3 апр 19, 10:37    [21851012]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис,
Я вроде как сделал,но
Вопрос
Я поменял функции utf8ToString на Utf8ToAnsi

Это правильно?
3 апр 19, 11:50    [21851090]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9634
Alepawka,

понятия не имею. Какую именно UDF вы модифицируете? Ссылка на код, и название функции, ну или здесь пример кода под спойлером выложи
3 апр 19, 11:55    [21851100]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис
Alepawka,

понятия не имею. Какую именно UDF вы модифицируете? Ссылка на код, и название функции, ну или здесь пример кода под спойлером выложи


Итак, не модифицирую, скорей переписываю для работы на linux
11351770

Что именно я сделал:
Файл u_Func.pas

Удалил эту часть кода:

uses
{$IF CompilerVersion > 22}
Winapi.Windows;
{$ELSE}
Windows;
{$IFEND}

function AnsiUpperCase(const S: String): String;
{$IFDEF MSWINDOWS}
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PChar(S), Len);
if Len > 0 then
CharUpperBuff(PChar(Result), Len);
end;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
begin
Result := UCS4StringToUnicodeString(UCS4UpperCase(UnicodeStringToUCS4String(S)));
end;
{$ENDIF POSIX}

Посмотрел, что условие для windows, удалил
Далее, посмотрел документацию по FPC - AnsiUpperCase есть встроенная, поэтому тоже удалил.

Далее
В главном файле проекта, как уже сказал раньше, вместо utf8ToString поставил Utf8ToAnsi
(Прикрепил файл)

К сообщению приложен файл (udf_StrMatch.dpr - 2Kb) cкачать
3 апр 19, 12:30    [21851151]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9634
Alepawka,

FPC какой версии? Для облегчения миграции для начала неплохо бы врубить режим дельфи

{$IFDEF FPC}
{$MODE DELPHI}{$H+}
{$ENDIF}

и не забывать включить многопоточный менеджер памяти в список модулей

{$IFDEF unix}
cthreads,
{$ENDIF }
3 апр 19, 13:37    [21851264]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис,
3.0.4
Спасибо) добавил код
Кстати, написал, функции работают)
Спасибо большое за помощь!)
3 апр 19, 14:08    [21851301]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис,
Вот вопрос с кодировками
При создании функции был указан тип cstring.
В какой формат мне конвертировать данные из БД, чтоб функция работала корректно?

Допустим, есть человек в базе Иванов Иван Иванович.
Пишу запрос:
Select sername || ' ' || name as name, 
"SIMILAR" ('Иванов Иван Иванович', name)
from ...

И выдает, что совпадение 89.
3 апр 19, 14:23    [21851322]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9634
Alepawka,

у тебя БД в какой кодировке?
3 апр 19, 14:38    [21851345]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис,
Столбцы в varchar
Пробовал с cast преобразовывать
Так же
Пробовал trim - тоже не помогает
3 апр 19, 14:48    [21851361]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис,
А может сделать временную таблицу?

Сделать процедуру поиска
Данные с формы добалять, допустим, в столбец временной таблицы
И пусть он сравнивает с моей таблицей людей?
3 апр 19, 14:52    [21851367]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9634
Alepawka,

я тебя про кодировку спрашиваю, а ты мне про варчары
3 апр 19, 15:08    [21851383]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Симонов Денис,
Ахах, прости, utf8
3 апр 19, 16:51    [21851501]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Док
Member

Откуда: Казань
Сообщений: 6221
Симонов Денис
и не забывать включить многопоточный менеджер памяти в список модулей

{$IFDEF unix}
cthreads,
{$ENDIF }

вдогонку...
дока (по-крайне мере, для Лазаря) еще рекомендует подключать туда же и сишный манагер памяти cmem (тынц, тынц), который имеет некоторые преимущества перед фрипаскалевским.
3 апр 19, 21:22    [21851819]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск  [new]
Alepawka
Member

Откуда:
Сообщений: 40
Док,
Спасибо большое за информацию, все сделал)
4 апр 19, 10:23    [21852168]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Firebird, InterBase Ответить