2015-05-12 6 views
1


Я пытаюсь использовать StructuredQuery в REST Uri, как задокументировано here.
Когда я использую Почтальон из Chrome и запроса запроса URI, как:Marklogic 400 Плохой запрос

http://IPADDRESS:PORT/v1/search?structuredQuery={"query":{"or-query":{"queries":[{"and-query":{"queries":[ {"word-constraint-query":{"constraint-name":"bio","text":["product"]}}, {"value-constraint-query":{"constraint-name":"company","text":["MarkLogic"]}} ]}}, {"and-query":{"queries":[ {"element-constraint-query":{"constraint-name":"spoken","and-query": {"queries":[{"term-query":{"text":["fie"]}}]} }}, {"word-constraint-query":{"constraint-name":"stagedir","text":["fall"]}}, {"value-constraint-query":{"constraint-name":"person","text":["GRUMIO"]}} ]}}, {"and-query":{"queries":[ {"properties-query":{"term-query":{"text":["fish"]}}}, {"directory-query":{"uri":["/images/2012/02/27/"]},"infinite":true} ]}}, {"and-query":{"queries":[ {"collection-query":{"uri":["mlw2012"]}}, {"term-query":{"text":["fun"]}} ]}}]}}} 

Это даст мне ответ.

Теперь, когда я пытаюсь реализовать это в Java, используя HttpClient это дает мне 400 Bad ошибку запроса, код:

CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
query="http://192.168.192.110:8013/v1/search?structuredQuery=%7B%22query%22%3A%7B%22or-query%22%3A%7B%22queries%22%3A%5B%7B%22and-query%22%3A%7B%22queries%22%3A%5B%20%7B%22word-constraint-query%22%3A%7B%22constraint-name%22%3A%22bio%22%2C%22text%22%3A%5B%22product%22%5D%7D%7D%2C%20%7B%22value-constraint-query%22%3A%7B%22constraint-name%22%3A%22company%22%2C%22text%22%3A%5B%22MarkLogic%22%5D%7D%7D%20%5D%7D%7D%2C%20%7B%22and-query%22%3A%7B%22queries%22%3A%5B%20%7B%22element-constraint-query%22%3A%7B%22constraint-name%22%3A%22spoken%22%2C%22and-query%22%3A%20%7B%22queries%22%3A%5B%7B%22term-query%22%3A%7B%22text%22%3A%5B%22fie%22%5D%7D%7D%5D%7D%20%7D%7D%2C%20%7B%22word-constraint-query%22%3A%7B%22constraint-name%22%3A%22stagedir%22%2C%22text%22%3A%5B%22fall%22%5D%7D%7D%2C%20%7B%22value-constraint-query%22%3A%7B%22constraint-name%22%3A%22person%22%2C%22text%22%3A%5B%22GRUMIO%22%5D%7D%7D%20%5D%7D%7D%2C%20%7B%22and-query%22%3A%7B%22queries%22%3A%5B%20%7B%22properties-query%22%3A%7B%22term-query%22%3A%7B%22text%22%3A%5B%22fish%22%5D%7D%7D%7D%2C%20%7B%22directory-query%22%3A%7B%22uri%22%3A%5B%22%2Fimages%2F2012%2F02%2F27%2F%22%5D%7D%2C%22infinite%22%3Atrue%7D%20%5D%7D%7D%2C%20%7B%22and-query%22%3A%7B%22queries%22%3A%5B%20%7B%22collection-query%22%3A%7B%22uri%22%3A%5B%22mlw2012%22%5D%7D%7D%2C%20%7B%22term-query%22%3A%7B%22text%22%3A%5B%22fun%22%5D%7D%7D%20%5D%7D%7D%5D%7D%7D%7D" 
    credsProvider.setCredentials(new AuthScope(IpAddress, port), new UsernamePasswordCredentials(user, password)); 

    DefaultHttpClient client = new DefaultHttpClient(); 
    client.setCredentialsProvider(credsProvider); 

    HttpGet get = new HttpGet(query); 
    ResponseHandler<String> handler = new BasicResponseHandler(); 
    HttpResponse resp = client.execute(get); 

Ошибка:

HTTP/1.1 400 Bad Request [Content-type: application/xml, Server: MarkLogic, Content-Length: 364, Connection: Keep-Alive, Keep-Alive: timeout=5] 

Что я пропустил?

Заранее благодарен,
Prithvi.

ответ

1

Если вы распечатываете тело ответа об ошибке, это должно дать вам больше информации.

Таким образом, вы можете рассмотреть возможность использования Java API, который построен поверх Apache HttpClient и Jersey Client и обрабатывает HTTP-взаимодействия для вас.

0

Вы можете попробовать проверить свой структурированный запрос, используя search:resolve в консоли запроса. Чтобы проверить, вы можете использовать search:parse для построения структурированного запроса из текста запроса. Возможно, вы неправильно определили свои ограничения в своем узле параметров, и это даст вам возможность протестировать его, а также использовать search:check-options, чтобы убедиться, что ваш узел параметров правильно структурирован. Вы должны использовать /v1/config/query/(default|{name}) в службе REST для установки того же узла параметров, что и параметр по умолчанию или как запрос, используя параметр URL options. Таким образом, вы можете убедиться, что у вас установлены ограничения, индексы диапазонов и т. Д., Либо вы получите ответ «Плохой запрос» из интерфейса REST.

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