2016-12-06 2 views
3
{ 
    "title": "...", 
    "description": "...", 
    "languageKey": "ja" 
} { 
    "title": "...", 
    "description": "...", 
    "languageKey": "ja" 
} { 
    "title": "...", 
    "description": "...", 
    "languageKey": "ja" 
} 

Этот выход подается к завитка запросукак разделить выход JQ на каждом объекте JSon

ссылка: https://www.elastic.co/blog/loading-wikipedia

curl localhost:9200/dewikiquote/_search -d '{"query": {"match_all":{}}}' \ 
| jq '.hits.hits[] | ._source' \ 
| jq '{title: .heading[0], description: .text, languageKey: "ja"} \ 
| curl -H 'Content-Type: application/json' -XPUT 'http://localhost:11223/context/api/add' -d @- 

Но ниже Java конечной точки ударил только один раз, и карта data имеет только один заголовок, описание и язык. Почему другие элементы json потеряны?

@RequestMapping(path = "/api/add", method = RequestMethod.PUT) 
public void add(@RequestBody Map<String, String> data) 
{ 
... 

Это потому, что выход jq не разбит на каждый объект json? если да, то как это сделать с помощью jq?

+0

так что lemme получите это очищение, и вы запрашиваете что-то от ElasticSearch, а затем пытаетесь подать свой вывод в другой завиток, который говорит о правильном сервере java? – nafas

+0

Да, я пытаюсь реализовать гибкие функции типа поиска с помощью поиска в спящем режиме + lucene. Я хотел получить данные wikiquote для тестирования моих пользовательских анализаторов. –

+0

способ, которым я его вижу, к тому времени, когда вы пытаетесь отправить его в конечную точку, данные больше не являются массивом, не могут сказать, что 100%, но ответ @zeeshan может работать, если нет, вы можете рассмотреть сделайте некоторую петлю на выходе – nafas

ответ

0

Вот вариант, который петли через результаты и отправляют каждый отдельно:

Обращаем Ваше внимание, что -c печатает каждый выход без отступа.

curl localhost:9200/dewikiquote/_search -d '{"query": {"match_all":{}}}' \ 
| jq '.hits.hits[] | ._source' \ 
| jq -c '{title: .heading[0], description: .text, languageKey: "ja"} \ 
| while read next; do curl -H 'Content-Type: application/json' -XPUT 'http://localhost:11223/context/api/add' -d $next; done 
0

Я думаю, вы должны попробовать, как это: «[]»

curl localhost:9200/dewikiquote/_search -d '{"query": {"match_all":{}}}' \ 
| jq '.[] | {title: .title, description: .description, languageKey: "ja"} \ 
| curl -H 'Content-Type: application/json' -XPUT 'http://localhost:11223/context/api/add' -d @- 

вы отсутствующий оператор операции массива на возвращаемом списке JSon

+0

appologies для редактирования, это было случайно – nafas

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