我在後端使用solr + haystack(django插件),搜索工作正常;
使用ExtJs4 Solr實時搜索
雖然Django(和Haystack)及其模板爲我做了一切(我的意思是配置和使用它非常簡單),但ExtJS4稍微複雜一些;
問題是如何使用ExtJS4使用Solr?
一個例子非常感謝;
感謝您的幫助和對我的英語感到抱歉;
我在後端使用solr + haystack(django插件),搜索工作正常;
使用ExtJs4 Solr實時搜索
雖然Django(和Haystack)及其模板爲我做了一切(我的意思是配置和使用它非常簡單),但ExtJS4稍微複雜一些;
問題是如何使用ExtJS4使用Solr?
一個例子非常感謝;
感謝您的幫助和對我的英語感到抱歉;
由於ExtJS4是一個MVC框架,該解決方案就像MVC完成指定一個回調函數;
的控制器/ Search.js
Ext.define('yourapp.controller.Search',{
extend:'Ext.app.Controller',
stores:[
'Searches'
],
views:[
'search.Search',
'search.SearchList'
],
models:[
'Search'
],
init:function(){
this.control({
"search":{
'keyup':this.search,
},
});
},
search:function(inputedTxt, e, eOpts){
this.getSearchesStore().load({
//When sending a request, q will rely to request.POST['q'] on server-side;
//inputedTxt.getValue() -- a value, entered in textfield (or whatever)
params:{
q:inputedTxt.getValue()
},
callback:function(result){
if(result[0]){
//do something with the result
//i'd been creating a window with a grid inside. "Grid"'s view is written below.
}
}
}
});
的模型/ Search.js
Ext.define('yourapp.model.Search',{
extend:'Ext.data.Model',
fields:[
{name:'name', type:'string'}
]
});
的存儲/ Searches.js
Ext.define('yourapp.store.Searches',{
extend:'Ext.data.Store',
storeId: "searchStore",
model:'yourapp.model.Search',
autoLoad: false,
proxy:{
type:'ajax',
// server-side url
url: '/searchlist/',
actionMethods:{create: "POST", read: "POST", update: "POST", destroy: "POST"},
reader:{
type:'json',
root:'searches'
}
}
});
的視圖/搜索/ Search.js
//a Text field to input text;
Ext.define('yourapp.view.search.Search',{
extend:'Ext.form.field.Text',
alias: 'widget.search',
id: "searchView",
enableKeyEvents: true,
initComponent:function(){
this.callParent(arguments);
}
});
的視圖/搜索/ SearchList.js
//a view for a result
Ext.define('yourapp.view.search.SearchList',{
extend: 'Ext.grid.Panel',
alias:'widget.searchlist',
title: 'search result',
store: 'Searches',
columns:[
{
header:'Name',
dataIndex:'name',
flex:1
}
]
});
某處在視圖/ Viewport.jsxtype: 'search',
應插入用於要顯示的文本字段。
這就是ExtJS4的一部分。
在服務器端 - Django
: 「草垛」和Solr應該安裝和配置(通過「配置」我的意思是:搜索應該在服務器端已經工作);
在someapp/view.py
def searchlist(request):
from haystack.query import SearchQuerySet
# POST["q"] should be receivedt from our client-side
searchText = request.POST["q"]
sqs = SearchQuerySet().filter(name=searchText)
data = []
for result in sqs:
data.append({"name": result.object.name})
return HttpResponse('{ success:true, searches:'+simplejson.dumps(data)+'}', mimetype = 'application/json')
最後,在你的網址。PY你應該增加:
(r'^searchlist/','someapp.views.searchlist'),
這是它。最好的祝願。
P.S.
我知道這不是最大的答案,也沒有解釋,但對於我而言,我更喜歡代碼示例而不是口頭解釋。
SOLR從其查詢中使用wt=json
參數獲得JSON輸出,並且可以很容易地被ExtJS使用。
如果你需要使用JSONP您可以通過這個PARAM json.wrf=callback
你嘗試過什麼嗎?你有什麼特別的代碼需要幫助嗎? – sha 2012-03-20 10:15:54