Limych / GeniBase

2 stars 2 forks source link

Недостатки индексации новых записей #43

Closed a-KaDeMi-k closed 9 years ago

a-KaDeMi-k commented 9 years ago

1) это происходит несинхронно с формализацией В итоге, счётчик пишет, что всё доступно для поиска, а фамилии не находятся (нет индексов). Либо конкретизировать работу счётчика (например, писать "формализовано ХХХ, индексировано YYY"), либо расширять основной запрос (по id) на неиндексированные записи

2) запрос, отбирающий фамилии для индексации работает, как мы ещё раз недавно перепроверили, верно Но неверны, по-моему, запросы, отбирающие по этим фамилиям записи для индексации (на delete и insert). Туда ТОЖЕ надо добавить ограничения на даты модификации и смены алгоритма. Потому как похоже, что залил я сейчас Георгиевских... Там есть Иванов. Вот индексатор ВСЕХ Ивановых заново перелопачивает!!! А надо - только добавленные записи. Залил 5,5 тысяч строк, а 350 тыс. строк индексов уже обновились! %)

Limych commented 9 years ago

1) Это не баг. Это особенность системы. Процесс сходящийся и довольно быстро. Конкретизировать для пользователей его внутреннее устройство - это их лишь запутывать.

2) Всё правильно. Так и задумано с целью минимизации накопления ошибок.

a-KaDeMi-k commented 9 years ago

2) мы лишний раз перелопачиваем огромное кол-во записей! зачем? мы же чётко понимаем, какие нам надо апдейтить, а какие - нет

А с учётом того, что отбираем только 15 фамилий в минуту, процесс пересоздания ключей по большому массиву фамилий занимает часы и дни

Сделал pull reaquest

a-KaDeMi-k commented 9 years ago

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

Limych commented 9 years ago

1) Ок. Перепроверь, что твой тезис верен и придумай новый запрос на подсчёт числа доступных записей.

a-KaDeMi-k commented 9 years ago

Ну, к примеру, фамилия Огуль В базе сейчас по фамилии обнаруживается только Ив. Як. из списков потерь. Но в расширенном поиске по id = 1082638 можно выцепить ещё и Николая из награждённых Георгием 2-й ст.

Т.о., сейчас у нас определяются частично доступные для поиска записи

SELECT COUNT(*) from ?_persons p

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

SELECT COUNT(*) from ?_persons p
WHERE EXISTS (SELECT 1 FROM ?_idx_search_keys i WHERE i.person_id = p.id)

В принципе, можно поправить надпись на Из них сейчас доступны для некоторого поиска... и цифры не менять. Или оставить старую, но считать цифры по-другому. (Я так понимаю, ты склоняешься к этому варианту) Или выводить не две, а три цифры - всего/частично/полностью.

Limych commented 9 years ago

Вопрос: есть ли записи, для которых индексы никогда не сформируются по какой-либо причине?

a-KaDeMi-k commented 9 years ago

Я так понимаю, что у нас в индекс сейчас не попадают только чистые звёздочки (таких до недавнего добавления было 92 записи). Их мы, похоже, сейчас можем вытаскивать только если префильтр по фамилии пустой. Т.е. по любым полям, кроме этого. Возможно, это и хорошо. Не засоряются результаты поиска. Пример: имя - Хаим, АТД - Одесса

И "да", тогда получается, что чтобы не смущать пользователей надо подсчитывать

SELECT COUNT(*) from ?_persons p
WHERE 
 (
     EXISTS (SELECT 1 FROM ?_idx_search_keys i WHERE i.person_id = p.id)
  or p.surname = '*'
  )

Хотя... Записи без индексов у нас также спокойно поддаются поиску по всем полям, кроме фамилии. Блин! Ты меня всё время смущаешь! :) :) :) Я не могу определиться, как лучше :(

Limych commented 9 years ago

У меня есть предположение, что записи с фамилией «(Безфамильный)» также не получают ключи.

В общем, мне нужно чёткое понимание и однозначный проверенный вариант подсчёта числа доступных для поиска записей. Только после этого я внесу правку.

a-KaDeMi-k commented 9 years ago

Я специально делал запрос из записей persons не имеющих ключей в idx - вывело только звёздочки

Но там старые ключи для (Безфамильный) с нулевым типом (БЕЗФАМИЛЬНМИ и БИСФАМИЛН8) Я не знаю, будут ли они существовать после обновления индекса

По пустому значению фамилии ("") есть индесы (пустые) с типом 1. Свежие, от 15 февраля.

Индексов нулевого типа сейчас 1737 записей. Это, очевидно, свежие правки в базе (но "до" обновления скриптов). Думаю, надо чикнуть

Limych commented 9 years ago

Чикать ничего не надо. Пустые индексы — это плохо. Их надо фиксить в коде, чтобы не вылезали более. UPD: Сделано в рабочей версии.