Thanks all very much, I have solve the problem. The suggestion can use real datas now.
2011/7/21 Jerome Velociter <[email protected]> > Hi James, > > As a good practice when dealing with JSON in the browser, here is what you > can do : > > * Check the AJAX response in Firebug. If you don't see a "JSON" tab, then > something is wrong (the JSON is not valid). What you can do then is copy > the > response body from Firebug and submit it on JSONLint (http://jsonlint.com/ > ). > It will tell you what's wrong. > > Hope this helps > > Jerome > > 2011/7/21 许凌志(Jamesxu) <[email protected]> > > > According to Eduard's suggestion, I modify the macro code of > > SuggestLuceneService, and it works fine when I visit in browser. But it > > failed when I am trying to get it using ajax, in the ajax response, > > responseText is the right value get from the server, but the responseJSON > > is null. Could anyone check the code for me, what is wrong with it, it is > > really strange. > > > > The macro code for SuggestLuceneService: > > {{velocity}} > > #set($query = "$!request.query") > > #set($input = "$!request.input") > > #set($media = "$!request.media") > > #if($media != 'json' && $media != 'xml') > > #set($media = 'xml') > > #end > > #set($nb = "$!request.nb") > > #if($nb != '') > > #set($nb = $util.parseInt($nb) + 1) > > #else > > #set($nb = 6) > > #end > > #if($query != '' && $input != '') > > #set($query = $query.replaceAll('__INPUT__', $input)) > > #set($rawresults = $xwiki.lucene.getSearchResults($query, $util.null)) > > #set($results = $rawresults.getResults("0", "$nb")) > > #if($media == 'xml') > > #set($discard = $response.setContentType("text/xml")) > > <?xml version="1.0" encoding="UTF-8"?> > > <results> > > #foreach($item in $results) > > #set($itemfullname = "${item.wiki}:${item.space}.${item.name}") > > #set($itemdoc = $xwiki.getDocument($itemfullname)) > > #if($item.type == "attachment") > > #set($name = $item.filename) > > #set($url = $itemdoc.getAttachmentURL($name)) > > #else > > #set($name = $itemdoc.getDisplayTitle()) > > #set($url = $itemdoc.getURL()) > > #end > > <rs id="$url" > > info="${escapetool.xml($itemdoc.fullName)}">$escapetool.xml($name)</rs> > > #end > > </results> > > #end > > #if($media == 'json') > > #set($discard = $response.setContentType("application/json")) > > #set($size = $results.size()) > > [ > > #foreach($item in $results) > > #set($itemfullname = "${item.wiki}:${item.space}.${item.name}") > > #set($itemdoc = $xwiki.getDocument($itemfullname)) > > #if($item.type == "attachment") > > #set($name = $item.filename) > > #set($url = $itemdoc.getAttachmentURL($name)) > > #else > > #set($name = $itemdoc.getDisplayTitle()) > > #set($url = $itemdoc.getURL()) > > #end > > $velocityCount > > #if($velocityCount == $size) > > {"id":"$url", "info":"${escapetool.xml($itemdoc.fullName)}", > > "name":"${item.name}", "path':"$itemfullname", "type":"$item.type"} > > #else > > {"id":"$url", "info":"${escapetool.xml($itemdoc.fullName)}", > > "name":"${item.name}", "path':"$itemfullname", "type":"$item.type"}, > > #end > > #end > > ] > > #end > > #else > > {{info}} > > This service allows to retrieve search results for the suggest UI > > component. > > Examples: > > * [[$doc.getExternalURL('get', > > 'outputSyntax=plain&query=__INPUT__*&input=test')]] > > {{/info}} > > #end > > {{/velocity}} > > > > > > The ajax codes: > > _showSuggestionResults : function(query, position, size) { > > if(query == null) return; > > if(query == "") query = "icontest" > > new Ajax.Request(" > > > > > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=(name:__INPUT__*AND > > type:wikipage) OR (filename:__INPUT__* AND > > type:attachment)&nb=30&media=json", { > > method : 'get', > > asynchronous : false, > > parameters : {"input":query}, > > onSuccess : this._onSuccess.bind(this, position, size, query), > > onFailure : this._onFailure.bind(this) > > }); > > }, > > > > _onSuccess : function(position, size, query, response) { > > var results= response.responseJSON* //undefined* > > //var results= response.responseText.evalJSON(true); *//parse error* > > } > > > > There is the result file in the attachment, when I get it directly from > the > > browser > > > > On Wed, Jul 20, 2011 at 5:56 PM, Eduard Moraru <[email protected]> > > wrote: > > > > > Hi James, > > > > > > That's just a query problem. The queries that are used for the search > > > suggest are located in XWiki.SearchSuggestConfig. The query for > Document > > > Name/Content are not complete. They also need to specify that the > result > > > should be a document, and not anything (like attachments for instance). > > The > > > correct query for searching for documents by document name should be: > > > > > > name:__INPUT__* AND type:wikipage > > > > > > For attachment name, the correct query should be: > > > > > > filename:__INPUT__* AND type:attachment > > > > > > So, for your usecase (quering documents by name or attachments by > name), > > > the > > > query should be: > > > > > > (filename:__INPUT__* AND type:attachment) OR (name:__INPUT__* AND > > > type:wikipage) > > > > > > > > I`ve tested it out by creating a page named "IconTest" and then > searching > > > for "icon". The results were: > > > > > > <results> > > > <rs id="/xwiki/bin/download/XWiki/RequestsStatus/icon.png" > > > info="XWiki.RequestsStatus">icon.png</rs> > > > <rs id="/xwiki/bin/download/XWiki/ExtensionManager/icon.png" > > > info="XWiki.ExtensionManager">icon.png</rs> > > > <rs id="/xwiki/bin/download/Panels/PanelWizard/icon.png" > > > info="Panels.PanelWizard">icon.png</rs> > > > <rs id="/xwiki/bin/download/XWiki/OfficeImporterAdmin/icon.png" > > > info="XWiki.OfficeImporterAdmin">icon.png</rs> > > > <rs id="/xwiki/bin/download/XWiki/SearchAdmin/icon.png" > > > info="XWiki.SearchAdmin">icon.png</rs> > > > <rs id="/xwiki/bin/download/Blog/Categories/icon.png" > > > info="Blog.Categories">icon.png</rs> <----------- > attachments > > > <rs id="/xwiki/bin/view/Main/IconTest" > > > info="Main.IconTest">IconTest</rs> <----------- documents > > > </results> > > > > > > Ignore the fact that the result is in XML, you can make it json, as > > > suggested in my previous mail. > > > > > > Hope that works for you. > > > > > > Thanks, > > > Eduard > > > > > > 2011/7/20 许凌志(Jamesxu) <[email protected]> > > > > > > > Thanks Eduard very much, It is really helpful, today I am trying to > use > > > > SuggestLuceneService to test the autosuggestion functions, I found a > > > > problem. > > > > > > > > For example, I create a page named "jamesxu", and upload an > attachment > > > > named > > > > "autosuggest1.js", then I input the query "jame" to the search box on > > the > > > > top right of the page, the suggestion list shows up, but the results > in > > > the > > > > "Document Name" and "Document Content" contains both the wiki page > > > > "jamesxu" > > > > and its attachment "autosuggest1.js", this behaviour is not excepted > in > > > the > > > > autosuggestion features of the editor, because when user types > "jame“, > > he > > > > really wants to query the wiki page or attachment begin with or > > contains > > > > "jame", the attachment "autosuggest1.js" does not contains "jame", > it > > > > should not be included in the suggestion results. > > > > > > > > On Tue, Jul 19, 2011 at 10:14 PM, Eduard Moraru < > [email protected] > > > > >wrote: > > > > > > > > > Hi James, > > > > > > > > > > I agree with Marius that you should reuse as much as possible what > > > > already > > > > > exists instead of creating an alternate service that does, in a > great > > > > > proportions, the same as an existing one but has one extra feature. > > > > > > > > > > So, as I was browsing trough REST's resources, I noticed an > > > undocumented > > > > > "/wikis/{wikiName}/attachments" [1] resource at the wiki level that > > is > > > > able > > > > > to search for attachments. As you can see from the method's > > signature, > > > it > > > > > accepts parameters to filter your search by attachment name, page, > > > space, > > > > > author, and type. I will fix the REST API documentation and include > > it. > > > > > > > > > > This resource should do the trick for what you need, used in > > > conjunction > > > > > with the search resource that should handle documents. > > > > > > > > > > The advantage of this is that you can get json, as you did for the > > > search > > > > > resource. > > > > > The disadvantage of the whole REST API, for your needs, might be > that > > > it > > > > is > > > > > limited at wiki level and can not perform a multi-wiki search in > one > > > > query > > > > > (wihout you having to do a search for each wiki). > > > > > > > > > > On the other side, the Lucene search does not have this problem > > because > > > > it > > > > > indexes all the wikis and can perform searches on all wikis in one > > > query > > > > > and > > > > > it does it much faster than REST (which uses database queries). > Also, > > > > > lucene > > > > > is used in the search suggest (the one at the top-right corner of > the > > > > > screen) and in the main XWiki search as well, so it would be much > > > better > > > > if > > > > > the results were consistent. Besides this, if the lucene system is > > > > improved > > > > > over time, your results will also be improved as a result. > > > > > > > > > > So my suggestion is that you modify XWiki.SuggestLuceneService and > > make > > > > it > > > > > accept a "media" parameter (or something similar) that should > accept > > at > > > > > least 2 values: "xml"(default) and "json". Based on this value, you > > can > > > > > wrap > > > > > the results of the lucene search into a basic json structure that > you > > > can > > > > > easily use in your suggest box. You can check [2][3] and [4] for > > > > references > > > > > of how to use Lucene search in XWiki. > > > > > Once you are done with it, you can even do a pull request so that > > this > > > > > feature gets integrated into XWiki. > > > > > > > > > > The best and cleanest solution would be that the REST search > resource > > > > used > > > > > internally lucene instead of a custom database query and that there > > > would > > > > > be > > > > > a single search back-end (preferably configurable in > administration). > > > > > Anyway, it's not your job to fix XWiki :) so making > > > > > XWiki.SuggestLuceneService return json too is the best way to go > > right > > > > now, > > > > > IMO. > > > > > > > > > > Thanks, > > > > > Eduard > > > > > > > > > > ----------------- > > > > > References: > > > > > [1] > > > > > > > > > > > > > > > > > > > > https://github.com/xwiki/xwiki-platform/blob/master/xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/src/main/java/org/xwiki/rest/resources/wikis/WikiAttachmentsResource.java > > > > > [2] > > http://extensions.xwiki.org/xwiki/bin/view/Extension/Lucene+Plugin > > > > > [3] > > > > > > > > > > > > > > > > > > > > https://github.com/xwiki/xwiki-platform/blob/master/xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-lucene/src/main/java/com/xpn/xwiki/plugin/lucene/LucenePluginApi.java > > > > > [4] > > > > > > > > > > > > > > > > > > > > https://github.com/xwiki/xwiki-platform/blob/master/xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-lucene/src/main/java/com/xpn/xwiki/plugin/lucene/SearchResult.java > > > > > > > > > > > > > > > On Tue, Jul 19, 2011 at 8:36 AM, 许凌志(Jamesxu) < > > [email protected] > > > > > >wrote: > > > > > > > > > > > Hi, these days I need to implement the rest services for getting > > > > > suggestion > > > > > > results for link autosuggestion. In my design, I think the > > suggestion > > > > > > results should be filtered and ranked by the following > conditions. > > > > > > (for example user types "[[mytest" in page "xwiki:main.newpage") > > > > > > First [[ is triggered, when user keep typing, the page and > > attachment > > > > > > suggestion results should be filtered and ranked by the following > > > > rules: > > > > > > 1. Prefix matched (only for page name and attachment name) > > > > > > - The pages which are in the same wiki and space of the > document > > > > > current > > > > > > edited.( Prior A) > > > > > > - The pages which are in the same wiki but different space of > the > > > > > > document current edited;(Prior B) > > > > > > - The pages which are in different wiki and different space of > > the > > > > > > document current edited; (Prior C); > > > > > > 2. Partial matched (only for page name and attachment name) > > > > > > - The pages which are in the same wiki and space of the > document > > > > > current > > > > > > edited.( Prior C) > > > > > > - The pages which are in the same wiki but different space of > the > > > > > > document current edited;(Prior D) > > > > > > - The pages which are in different wiki and different space of > > the > > > > > > document current edited; (Prior E) > > > > > > 3. If no page and attachment matches the above two rules, the > > > > suggestion > > > > > > box will be disappeared.(eclipse way) > > > > > > > > > > > > However, sometimes user might insert the space name too, for > > example, > > > > > user > > > > > > will type "[[Main", following the rule 1 and rule 2, the pages > > begins > > > > > with > > > > > > "Main" will be first retrieved as the suggestion results untill > > user > > > > > types > > > > > > "." after "Main", the suggestion result will be retreved from the > > > pages > > > > > > under the space "Main" only. Filters still obey the above three > > > rules. > > > > > > And also when user types "attach:", the suggestion result will be > > > > > retrieved > > > > > > the attachments only following the above three rules. > > > > > > And if the link is under the attachment context, when "@" is > typed, > > > the > > > > > > attachments only will be retrieved following the above three > rules. > > > > > > > > > > > > In order to do this, I investigated the rest services already > > > existed( > > > > > > > http://platform.xwiki.org/xwiki/bin/view/Features/XWikiRESTfulAPI > > ), > > > > but > > > > > I > > > > > > found none is perfect suitable for my needs. So I talk with > Marius, > > > he > > > > > > suggested me to use the existed services which are closed to my > > needs > > > > > > first, > > > > > > and then write the perfect one later. > > > > > > > > > > > > However, I only found the rest service:/wikis/{wiki}/search is > the > > > > most > > > > > > closed one for the pages suggestion to my needs, there is no > > > attachment > > > > > > search rest service for attachment suggestion, Marius adviced me > to > > > use > > > > " > > > > > > > > > > > > > > > > > > > > > > > > > > > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb={number}&input={query}<http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb=%7Bnumber%7D&input=%7Bquery%7D> > < > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb=%7Bnumber%7D&input=%7Bquery%7D > > > > < > > > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb=%7Bnumber%7D&input=%7Bquery%7D > > > > > > < > > > > > > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb=%7Bnumber%7D&input=%7Bquery%7D > > > > > > > > < > > > > > > > > > > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb=%7Bnumber%7D&input=%7Bquery%7D > > > > > > > > > > < > > > > > > > > > > > > > > > http://localhost:8080/xwiki/bin/get/XWiki/SuggestLuceneService?outputSyntax=plain&query=name:__INPUT__*%20AND%20type:attachment&nb=%7Bnumber%7D&input=%7Bquery%7D > > > > > > > > > > > > " > > > > > > instead, but I found the search result is in xml format(not > json), > > > and > > > > > also > > > > > > the information of the results got from SuggestLuceneService is > > > limit. > > > > > > > > > > > > I have read the document of how to write custom rest service, but > > the > > > > > > information is limit, any one can guide me to run an helloworld? > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Best wishes, > > > > > > > > > > > > 许凌志(Jame Xu) > > > > > > > > > > > > MOE KLINNS Lab and SKLMS Lab, Xi'an Jiaotong University > > > > > > > > > > > > Department of Computer Science and Technology, Xi’an Jiaotong > > > > University > > > > > > _______________________________________________ > > > > > > devs mailing list > > > > > > [email protected] > > > > > > http://lists.xwiki.org/mailman/listinfo/devs > > > > > > > > > > > _______________________________________________ > > > > > devs mailing list > > > > > [email protected] > > > > > http://lists.xwiki.org/mailman/listinfo/devs > > > > > > > > > > > > > > > > > > > > > -- > > > > Best wishes, > > > > > > > > 许凌志(Jame Xu) > > > > > > > > MOE KLINNS Lab and SKLMS Lab, Xi'an Jiaotong University > > > > > > > > Department of Computer Science and Technology, Xi’an Jiaotong > > University > > > > _______________________________________________ > > > > devs mailing list > > > > [email protected] > > > > http://lists.xwiki.org/mailman/listinfo/devs > > > > > > > _______________________________________________ > > > devs mailing list > > > [email protected] > > > http://lists.xwiki.org/mailman/listinfo/devs > > > > > > > > > > > -- > > Best wishes, > > > > 许凌志(Jame Xu) > > > > MOE KLINNS Lab and SKLMS Lab, Xi'an Jiaotong University > > > > Department of Computer Science and Technology, Xi’an Jiaotong University > > > > _______________________________________________ > > devs mailing list > > [email protected] > > http://lists.xwiki.org/mailman/listinfo/devs > > > > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > -- Best wishes, 许凌志(Jame Xu) MOE KLINNS Lab and SKLMS Lab, Xi'an Jiaotong University Department of Computer Science and Technology, Xi’an Jiaotong University _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

