С помощью клиента PHP Riak, как мне одновременно искать значения в двух индексах?

У меня есть набор данных в Riak с различными проиндексированными элементами (используя index_bin). Как мне искать объекты, в которых два из этих индексов имеют определенные значения в одном запросе? Пример: пол, фамилия, где пол = мужской, а фамилия = Смит.

Буду ли я использовать Map/Reduce? Если да, то какой пример кода?


person Monty    schedule 14.04.2014    source источник
comment
Что вы сделали для достижения этой цели или хотели бы, чтобы члены сообщества сделали эту работу за вас бесплатно?   -  person Giacomo1968    schedule 14.04.2014
comment
Привет, Джек, я просмотрел документацию API, и, кроме циклического просмотра индексов в двух отдельных сегментах кода, я, похоже, не нашел способа сделать это с помощью клиентской библиотеки PHP от Basho. Я надеюсь, что есть более эффективный способ сделать это. Я не ожидаю, что кто-то сделает работу за меня бесплатно, просто надеюсь, что кто-то, возможно, понял, как это сделать в прошлом.   -  person Monty    schedule 14.04.2014


Ответы (1)


Ограничение вторичных индексов в Riak заключается в том, что одновременно можно выполнять поиск только по одному индексу. Поэтому вы не сможете напрямую комбинировать индексы.

Поскольку данные индекса хранятся в метаданных записи, вы можете создать задание mapreduce, которое принимает один запрос 2i в качестве входных данных и имеет этап сопоставления, который фильтрует другой на основе метаданных. Однако использование mapreduce таким образом может быть довольно медленным и неэффективным, поскольку все данные, передаваемые в функцию этапа отображения, должны быть прочитаны с диска.

Если вы хотите обслуживать достаточно распространенный и предсказуемый запрос, вы всегда можете вместо этого создать и использовать составной индекс. Вы могли бы, например. создайте индекс с именем gender_name_bin, который может иметь такие значения, как male_Smith. Это позволит вам выполнять запрос диапазона для последней части индекса, пока первая часть фиксирована, что дает некоторую гибкость.

В последних версиях также можно фильтровать значения вторичного индекса на основе регулярных выражений, что не требует загрузки фактического объекта. Дополнительную информацию об этом можно найти здесь.

person Christian Dahlqvist    schedule 14.04.2014
comment
Спасибо Кристиан - это подтверждает то, что я думал. Я надеюсь, что в будущих версиях Riak можно будет запрашивать несколько индексов. Я предполагаю, что другой альтернативой было бы использование SOLR и полнотекстового поиска, что должно быть быстрее, чем выполнение заданий Map/Reduce. - person Monty; 15.04.2014
comment
Я ожидаю, что новая версия Riak Search в Riak 2.0, которая интегрирует Riak с Solr, заменит множество вторичных индексов, где требуется гибкость и возможность запрашивать несколько полей. - person Christian Dahlqvist; 15.04.2014