我目前正在尝试为Solr索引实现jquery自动完成功能。在这个solr索引中,我有多个字段,自动完成应该处理。为了简单起见,我目前只处理两个领域:
只要我只想搜索一个字段,它就没有任何问题,但是我不知道如何使用两个或多个字段来实现它,这就是我的代码实际上的样子:
$search_el.autocomplete({
source : function(request, response) {
$.ajax({
url : 'http://192.168.82.75:8983/solr/local/select',
dataType : 'jsonp',
jsonp : 'json.wrf',
data: {
q: 'ac_event_title:'+$search_el.val()+' OR ac_event_information:'+$search_el.val(),
wt: 'json',
fq: 'ss_type:event',
hl: 'true',
'hl.fl': 'ac_event_title,ac_event_information'
},
success : function(data) {
var docs = JSON.stringify(data.response.docs);
var jsonData = JSON.parse(docs);
response($.map(jsonData, function(value, key) {
return {
label : value.ac_event_title[0]
}
}));
}
});
},
minLength : 1
});
所以问题一般是我不知道怎么告诉自动完成,“如果结果在字段中”ac_event_title“show”ac_event_title“,如果结果在字段”ac_event_information“中显示”ac_event_information“。
答案 0 :(得分:0)
如果您使用 Solr 5.0 及更高版本,则无需为多个字段定义单独的字典。您可以使用suggest_field
将所需字段复制到新copyField
,然后为suggest_field
创建字典。建议者字段应存储在solr中,因此字段定义中将需要stored=true
。
否则您可以将以下配置用于旧的solr版本。
您可以在solr suggestComponent
中配置多个建议字典,然后将字典添加到requestHandler
。您可以根据需要添加其他参数。此配置已放入solrconfig.xml
。
例如,检查以下配置:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">suggest</str>
<str name="lookupImpl">AnalyzingLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggest_field</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="buildOnCommit">true</str>
</lst>
<lst name="suggester">
<str name="name">suggest1</str>
<str name="lookupImpl">AnalyzingLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">state</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.dictionary">suggest</str>
<str name="suggest.dictionary">suggest1</str>
<str name="suggest.count">10</str>
<str name="suggest.onlyMorePopular">true</str>
<str name="suggest.count">5</str>
<str name="suggest.collate">false</str>
<str name="echoParams">explicit</str>
<str name="rows">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>