У меня возникли проблемы с созданием регулярного выражения для запроса к базе данных, который я делаю. В настоящее время я использую базу данных Accumulo (что не имеет значения на данный момент). В Accumulo строка выглядит так:
rowid columnfamily : columnqualifier [ ] value
и вам разрешено сопоставлять шаблоны для каждого из четырех с помощью итератора. Итак, у меня возникли проблемы с попыткой придумать шаблон, соответствующий rowid
. Весь ряд выглядит так
2beab7b3-0792-4347-a63b-3e2f3c6b048d.4ce7be2a-fb2e-4694-94db-877a0ed3e68b.edd1918d-9ddc-4597-891a-d12c8c7be602.1445442700588 transaction:occurrences [] @\x18\x00\x00\x00\x00\x00\x00
Где только rowid
, который я пытаюсь сопоставить, выглядит так:
2beab7b3-0792-4347-a63b-3e2f3c6b048d.4ce7be2a-fb2e-4694-94db-877a0ed3e68b.edd1918d-9ddc-4597-891a-d12c8c7be602.1445442700588
Это уникальный ключ, который я создал, используя 3 других ключа (из 3 объектов) и отметку времени, разделенные .
. Итак, в основном мы имеем это:
2beab7b3-0792-4347-a63b-3e2f3c6b048d //key 1 for the method below
4ce7be2a-fb2e-4694-94db-877a0ed3e68b //dont care about this key
edd1918d-9ddc-4597-891a-d12c8c7be602 //key 3 for the method below
1445442700588 //dont care about the timestamp
Метод, с которым я работаю, будет примерно таким:
public blah getBlah(String key1, String key3){
//do regex stuff
}
Где key1
— первая часть большого ключа (показана выше), а key3
— третья часть большого ключа (также показана выше).
Итак, все сводится к тому, что я буду знать 2 части составного ключа из четырех частей, которые всегда будут в одной и той же форме, и мне нужно создать сопоставление регулярных выражений или шаблонов, чтобы узнать, когда первая и третья части ключ соответствует входным данным метода getBlah()
.
ИЗМЕНИТЬ
Загвоздка в Accumulo (по крайней мере, в этом случае) заключается в том, что я в основном строю регулярное выражение для запроса. Поэтому, когда вызывается метод getBlah(String k1, String k2)
, я еще не делал запросов к базе данных, поэтому я не буду знать весь ключ или даже то, как выглядит строка. В этом случае запрос в основном похож на оператор выбора. Таким образом, он просматривает всю таблицу и ищет @ rowid
, где этот шаблон совпадает, а затем вытаскивает все совпадения. Поэтому мне нужно иметь возможность использовать этот метод для динамического сопоставления шаблона rowid
s, не зная их заранее.
Таким образом, все rowid
s всегда будут в форме xxxxxxx.xxxxxxx.xxxxxxx.xxxxxxx
, а ключи, которые передаются в метод, всегда будут представлять первый и третий наборы x.
select from table where blah = whatever
. В зависимости от регулярного выражения результаты будут извлечены только в том случае, если они соответствуют шаблону. Я не хочу вытаскивать все, а затем сортировать или, что еще хуже, делать несколько запросов. - person erp   schedule 22.10.2015