Solr JQuery自动完成无法自动完成。

5

我正在尝试使用Solr和JQuery UI实现一个HTML自动完成表单。

Solr的服务器记录了查询日志,Firebug确认我得到了一个JSON数组:

{"responseHeader":{"status":0,"QTime":3,"params":{"fl":"defaultCommonNameString","q":"defaultCommonName:angle","wt":"json"}},"response":{"numFound":42,"start":0,"docs":[{"defaultCommonNameString":["angle"]},{"defaultCommonNameString":["reporter un angle"]},{"defaultCommonNameString":["formule pour un angle"]},{"defaultCommonNameString":["angle droit"]},{"defaultCommonNameString":["angle au centre"]}, ...]}}}

但是这段代码没有显示响应:
<link rel="stylesheet" type="text/css" href="css/demos.css" />
<script type="text/javascript" src="jquery/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="jquery/jquery.ui.core.js"></script>
<script type="text/javascript" src="jquery/jquery.ui.widget.js"></script>
<script type="text/javascript" src="jquery/jquery.ui.position.js"></script>
<script type="text/javascript" src="jquery/jquery.ui.autocomplete.js"></script>
<script>
$(function() {
    $("#autosearch").autocomplete({
        source: function( request, response ) {
            $.ajax({
            url: "http://localhost:8080/solr/select",
            data: { 
                q: "defaultCommonName:"+request.term,
        wt:"json",
        fl: "defaultCommonNameString",
             }, 
             dataType: "json",
             type: "GET",

             success: function( data ) {
                data=parse();
                function parse(){
                var parsedQueries=[];
                    for(var i=0;i<data.response.docs.length;i++){
                        parsedQueries[i]=data.response.docs[i].Query;
                    }
                    return parsedQueries;
                }

                response($.map(data.response.docs, function( item ) { 
                    return { 
                        label: item,
                        value: item
                    }; 
            }));
            }
          }); 
         },
        minLength: 1
        });
    });
</SCRIPT>
</head>
<body>
<label for="autosearch">Search Here :  </label>
<input id="autosearch"/>
</body>

感谢您的帮助

data.response.docs[i].Query 是指什么?它应该改为 data.response.docs[i].defaultCommonNameString 吗? - D_K
是的,它是data.response.docs [i] .defaultCommonNameString,但它不会改变结果 :-( - doumeasse38
尝试使用:dataType: "jsonp"; 同时 minLength: 2 可能更有效,但这取决于您的要求。 - D_K
2个回答

6
非常感谢D_K,这很好用!!!
代码:
$(function() {
    $("#autosearch").autocomplete({
        source: function( request, response ) {
            $.ajax({
            url: "http://localhost:8080/solr/select",
            data: { 
                q: "defaultCommonName:"+request.term,
                fl: "defaultCommonNameString",
                wt: 'json',
             }, 
             dataType: "jsonp",
             jsonp: 'json.wrf',

             success: function( data ) {
                response($.map(data.response.docs, function( item ) { 
                    return { 
                        label: item.defaultCommonNameString,
                        value: item.defaultCommonNameString,
                    }; 
            }));
            }
          }); 
         },
        minLength: 1
        });
    });

1

我正在使用上述代码,它可以正常工作,但服务器的IP和端口在页面源代码中是公开的,有没有办法加密这些信息。


你可以使用Apache代理来重定向请求。然后,只需使用当前的URL进行重定向: var url = window.location.protocol + '//' + window.location.host; ... $. ajax ({ url: url + '/solr/.../select', ... - doumeasse38

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接