Обратное форматирование результатов поиска Riak

Допустим, у меня есть объект в корзине test в моей установке Riak со следующей структурой:

{
    "animals": {
        "dog": "woof",
        "cat: "miaow",
        "cow": "moo"
    }
}

При выполнении поискового запроса по данному объекту структура результатов поиска следующая:

{
    "responseHeader": {
        "status": 0,
        "QTime": 3,
        "params": {
            "q": "animals_cow:moo",
            "q.op": "or",
            "filter":"",
            "wt": "json"
        }
    },
    "response": {
        "numFound": 1,
        "start": 0,
        "maxScore": "0.353553",
        "docs": [
            {
                "id": "test",
                "index": "test",
                "fields": {
                    "animals_cat": "miaow",
                    "animals_cow": "moo",
                    "animals_dog": "woof"
                },
                "props": {}
            }
        ]
    }
}

Как видите, способ хранения объекта, ключи cat, cow и dog вложены в animals. Однако, когда возвращаются результаты поиска, ни один из ключей не является вложенным и просто разделен _.

Мой вопрос заключается в следующем: есть ли какой-либо способ, предоставляемый Riak, для «обратного форматирования» поиска и возврата полей объекта в правильном (вложенном) формате? Это становится проблемой при хранении и возврате пользовательских данных, которые могут содержать _.

Я вижу, что последняя версия Riak (бета-версия) предоставляет схему поиска, но я не вижу, будет ли это ответом на мой вопрос.


person garbetjie    schedule 08.06.2014    source источник


Ответы (1)


То, что вы получаете обратно в результатах поиска, — это то, как выглядел объект после прохождения через анализатор json. Если вам нужны данные в другом формате, вы можете использовать собственный анализатор. Однако это повлияет только на вновь введенные данные.

Для существующих данных вы можете использовать поле id и отправить запрос на получение исходного объекта или использовать запрос solr в качестве входных данных для задание MapReduce.

person Joe    schedule 09.06.2014
comment
Спасибо за ответ, Джо. Однако требуется только одно уточнение: когда вы говорите использовать идентификатор и выдавать запрос на получение, вы имеете в виду в основном получение данных, а затем их повторное сохранение? Я не понимаю, как просто чтение данных может привести к тому, что пользовательский анализатор вступит в игру. - person garbetjie; 10.06.2014
comment
Я имею в виду, что когда вам нужны данные, используйте поиск, чтобы найти ключ, а затем получите значение, используя обычное получение, чтобы у вас был исходный объект для работы. - person Joe; 10.06.2014
comment
Ах, да, я думал об этом. Однако меня беспокоит только то, что если будет возвращено 100 результатов поиска, мы будем делать 101 запрос Riak, а не 1 только для поиска. Учитывая, что все данные возвращаются в поиске, имеет смысл тянуть их оттуда, если это возможно. - person garbetjie; 10.06.2014