2015-09-01 1 views
0

Надеюсь, я нахожу помощь. Я довольно новичок в solr и имею возможность участвовать в разговоре об этом. В следующем сценарии даже консультант, который проводил беседу, не был уверен, поэтому я надеюсь, что у кого-то была такая же проблема.Solr rangeearch внутри строк, содержащих цепочки символов

У меня есть список объектов, определенных определенным ключом. Например: Число сотрудников 500000 идентифицировано идентификатором (1-500000). Каждый из этих людей должен работать в течение следующих 2 лет. Каждый день этих лет определяется персонажем (работник будет работать - «А», работник не будет работать - «Б»). Таким образом, каждый сотрудник получил строку, содержащую до 730, но не каждый сотрудник имеет полную сумму 730 символов (конкретный сотрудник присоединился к компании позже или что-то еще).

Пример Строка для сотрудника 256:

AABBAAABAAAABBAB 

=> Сотрудник 256 будет работать 2 дня, 1 день он не работает, то он будет работать 3 дня подряд, 1 день FreeTime, 4 дня работы , 2 дня не на работе, 1 день работы, 1 день дома и так далее.

Пример Строка для сотрудника 542:

ABBAABABAAABAAAABABBAABAAAAABBABBABABBBABAABABBABABABBABAAAA 

Пример строки для сотрудника 2:

AAAABABBABABAAAABABABABABA 

Для dispositionpurposes Теперь я хочу, чтобы получить сотрудников, которые 4 дня подряд на работе, чтобы пойти обедать с ними или что угодно.

Я хочу получить следующие результаты:

employee 256 4 days free after day 8 
employee 542 4 days free after day 12, after day 23, after day 56 
employee 2 4 days free after day 0, after day 12 

Я надеюсь, что вы получили мою проблему. Пример - только для лучшего воображения. Возможно ли реализовать решение с solr? Приветствуем другие подходы к решению (также для представления дня). Сейчас мы зависим от ежедневного представления (каждый день имеет один символ). Но если вы доставляете мне высокопроизводительное решение, это даже можно обсуждать. Количество записей (500000) является реалистичным для проекта.

+0

Просто хотел прояснить мое понимание: для строки 'AABBAAABAAAABBAB', вы хотите индексировать ее на все дни работы (или нет) непрерывно. например 'AA',' BB', 'AAA',' B', 'AAAA',' BB', 'A',' B'. Позже вы хотите искать индекс, предоставляя такой запрос, как 'AAAA', который люди работали в течение 4 непрерывных дней. – YoungHobbit

+0

Можно ли индексировать подстроки всей строки? Я думал, что возможно только индексировать полную строку 'AABBAAABAAAABBAB'. Но да, вы правы. Конечно, я не буду искать каждый раз в течение 4 дней. Он может измениться, например, до 14 или 42 дней. –

+0

Я не уверен, что существует существующий фильтр, который может обеспечить эту функциональность. Но если у вас есть требование, вы можете реализовать свой собственный фильтр, который будет генерировать токен согласно требованию и использовать 'RemoveDuplicatesTokenFilter' для удаления дубликатов. – YoungHobbit

ответ

0

Я бы не стал модерировать это как сотрудники, а как доступность. Возможно, с доступностью как вложенным/дочерним объектом сотрудника. И тогда объект доступности будет StartDay, NumberOfDays.

Затем запрос становится более простым соединением с условием, когда дочерний элемент имеет NumberOfDays> = 4.

+0

С таким подходом у меня есть проблема, что будут рассмотрены только свободные дни. Что делать, если я хочу найти следующие 3 дня с состоянием «B» или что, если я хочу добавить состояние «C». Этот пример с сотрудниками - это не настоящая проблема, а просто передача концепции моего реального проблема. –

+0

Затем добавьте флаг для типа записи. Дело в том, что вам нужно представить * поиск домена * в Solr. И ваш поисковый домен здесь - это доступность, а не человек. Итак, если ваша передача концепции правильная, вам нужно индексировать на более высоком уровне детализации, чтобы воспользоваться преимуществами Solr. См. Презентацию Gilt для нескольких аспектов детализации: https://www.youtube.com/watch?v=8CiQatlZC0M –

Смежные вопросы