Hi, Puneet:
The search:query element can not contain a search:operator child element.
Only the search:options element can contain a search:operator child element.
The valid options elements are described here:
http://docs.marklogic.com/guide/rest-dev/appendixb
The valid query elements are described here:
http://docs.marklogic.com/guide/search-dev/structured-query#id_59265
The REST API supports sending both query and options in a single request:
http://docs.marklogic.com/guide/rest-dev/search#id_69918
Instead of putting the sort order in a string (which has to be parsed), you
might
want to specify it directly in the options with the sort-order element:
http://docs.marklogic.com/guide/rest-dev/appendixb#id_33716
Hoping that helps,
Erik Hennum
________________________________
From: [email protected]
[[email protected]] on behalf of Yinyan guy
[[email protected]]
Sent: Saturday, May 09, 2015 10:34 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Search API : defining a new operator
Hi Joe,
Thanks for your response. I realized I was not on the right track but I have
slightly improvised . Now I am configuring 2 search option
First one defining the sort operator using following XML
<?xml version="1.0"?>
<options xmlns="http://marklogic.com/appservices/search">
<operator name="sort">
<state name="relevance">
<sort-order>
<score/>
</sort-order>
</state>
<state name="postedon">
<sort-order direction="descending" type="xs:date">
<json-property>postedon</json-property>
</sort-order>
<sort-order>
<score/>
</sort-order>
</state>
</operator>
</options>
This one works without the error. Now when I am trying to define the state
using a separate XML as follows
<?xml version="1.0"?>
<query xmlns:search="http://marklogic.com/appservices/search">
<operator-state>
<operator-name>sort</operator-name>
<state-name>postedon</state-name>
</operator-state>
</query>
I am getting the following error
{"errorResponse":{"statusCode":400, "status":"Bad Request",
"messageCode":"RESTAPI-INVALIDCONTENT", "message":"RESTAPI-INVALIDCONTENT:
(err:FOER0000) Invalid content: Unexpected Payload: \t\t\tsort\t\tpostedon\t"}}
> User-Agent: curl/7.30.0
> Host: localhost:8040
> Accept: */*
> Content-type: application/xml
> Content-Length: 194
>
* upload completely sent off: 194 out of 194 bytes
< HTTP/1.1 400 Bad Request
< Content-type: application/json; charset=UTF-8
The data that I have is in JSON form and has postedon as date of the type
"2015-04-11", Now the error seems to be about the structure but I am not able
to understand.
regards,
Puneet
________________________________
From: [email protected]
To: [email protected]
Date: Sun, 10 May 2015 05:05:54 +0000
Subject: Re: [MarkLogic Dev General] Search API : defining a new operator
Hi Puneet,
What's the HTTP status code from your search request? Are you getting an error
in the response body, or simply a valid response with no results?
(If you're getting an error, you can find more details in the MarkLogic error
log at http://localhost:8001/get-error-log.xqy?filename=ErrorLog.txt)
Thanks.
-jb
From: Yinyan guy <[email protected]<mailto:[email protected]>>
Reply-To: MarkLogic Developer Discussion
<[email protected]<mailto:[email protected]>>
Date: Saturday, May 9, 2015 at 9:12 PM
To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Subject: Re: [MarkLogic Dev General] Search API : defining a new operator
Hi,
I was able to define the operator with following XML
<options
xmlns="http://marklogic.com/appservices/search"<http://marklogic.com/appservices/search%22>>
<operator name="sort">
<state name="postedon">
<sort-order type="xs:date" direction="ascending">
<json-property>postedon</json-property>
</sort-order>
</state>
</operator>
</options>
I can confirm this when I check in http://localhost:8040/v1/config/query
But now I am not able to use it in my Search API, I am using the following url
to verify the sort order
http://localhost:8040/v1/search?q=2015%20sort:postedon<http://localhost:9070/?q=2015%20sort:postedon>
I am not getting any results with the sort:postedon. I have create Element
Range index & Field Range index on postedon of type date.
Do I need any other index to influence the sort order of my results? is the
definition of the operator right?
Any tips on debugging it further would be helpful.
regards,
Puneet
________________________________
From: [email protected]<mailto:[email protected]>
To: [email protected]<mailto:[email protected]>
Date: Sat, 9 May 2015 21:21:26 +1000
Subject: [MarkLogic Dev General] Search API : defining a new operator
Hi,
I am trying to define an operator sort:postedon to sort the search results in
descending order of the date (json-property is postedon). I am using ML8 and my
data is JSON files only. Following is my xml file
<options
xmlns="http://marklogic.com/appservices/search"<http://marklogic.com/appservices/search%22>>
<search:operator name="sort">
<search:state name="postedon">
<search:sort-order direction="descending" type="xs:date">
<search:element ns="" json-property="postedon"/>
</search:sort-order>
<search:sort-order>
<search:score/>
</search:sort-order>
</search:state>
</search:operator>
</options>
And I am applying this search option using following command
curl -v -X PUT --digest --user admin:admin -H "Content-type: application/xml"
-d @./SortOrder.xml 'http://localhost:8040/v1/config/query/sortorder'
On running the command I am getting the following error
{"errorResponse":{"statusCode":500, "status":"Internal Server Error",
"messageCode":"INTERNAL ERROR", "message":"XDMP-DOCNONSBIND:
xdmp:get-request-body(\"xml\") -- No namespace binding for prefix search at
line 1 . See the MarkLogic server error log for further detail."}}
Following is the entry in the server log
2015-05-09 21:05:49.176 Notice: carsearch: XDMP-DOCNONSBIND:
xdmp:get-request-body("xml") -- No namespace binding for prefix search at line
1
2015-05-09 21:05:49.176 Notice: carsearch: in
/MarkLogic/rest-api/endpoints/config-query.xqy, at 42:9 [1.0-ml]
2015-05-09 21:05:49.176 Notice: carsearch: $headers = map:map(<map:map
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:map="http://marklogic.com/xdmp/map"><map:entry<http://marklogic.com/xdmp/map%22%3e%3cmap:entry>
key="content-type"><map:value xsi:type="xs:string">ap...</map:map>)
2015-05-09 21:05:49.176 Notice: carsearch: $method = "PUT"
2015-05-09 21:05:49.176 Notice: carsearch: $params = map:map(<map:map
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:map="http://marklogic.com/xdmp/map"><map:entry<http://marklogic.com/xdmp/map%22%3e%3cmap:entry>
key="named-option"><map:value xsi:type="xs:string">so...</map:map>)
I am following the examples in manuals at
https://docs.marklogic.com/guide/search-dev/query-options#id_30002
is the namespace "http://marklogic.com/appservices/search" right?
Any tips to resolving it would be useful.
regards,
Puneet
_______________________________________________ General mailing list
[email protected]<mailto:[email protected]> Manage
your subscription at: http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________ General mailing list
[email protected] Manage your subscription at:
http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
Manage your subscription at:
http://developer.marklogic.com/mailman/listinfo/general