Solr自动建议与多面搜索

时间:2018-12-12 09:26:25

标签: solr autocomplete lucene autosuggest

是否可以使用Solr多面搜索并返回找到输入的整个字段?

colModel:[ {name:'Year',index:'Year', width:70,sortable:false,editable:true,align:'center',editoptions:{size:15, maxlength:4}, formoptions:{ rowpos:1, label: "Year (*)"},editrules:{required:true}}, {name:'Level',index:'Level', width:70,sortable:false,editable:true,align:'center',edittype: "select", editoptions: { value: '1:1;2:2;3:3;4:4;5:5;6:6', defaultValue:'1', dataEvents : [ { 'type' : 'change', 'fn' : function ( el ) { // get the newly selected value from the user var levelz = $(el.target).val(), yearz ; var row = $(el.target).closest('tr.jqgrow'); var rowid = row.attr('id'); //yearz = ?? if (parseInt(levelz)==5 || parseInt(levelz)==6) { if (parseInt(yearz)>2017) { $("#gridmain").jqGrid('setColProp','Term', {editoptions: { value: '1:Sem 1;4:Sem 2;6:EY;9:OVR', defaultValue:'Sem 1'}} ); }else{ $("#gridmain").jqGrid('setColProp','Term', {editoptions: { value: '', defaultValue:''}} ); } }else{ $("#gridmain").jqGrid('setColProp','Term', {editoptions: { value: '1:TA1/CT1;2:TA2-before 2013;3:MY/TA2/CT2;4:TA3/CT3;5:TA4-before 2013;6:EY/TA4/CT4;9:OVR;D:CW1;E:CW2;F:CW3;G:CW4', defaultValue:'TA1'}} ); } } }]}, formoptions:{ rowpos:2, label: "Level (*)"},editrules:{required:true}}, {name:'Term',index:'Term', width:70, sortable:false,editable: true,align:'center',edittype: "select", editoptions: { value: '1:TA1/CT1;2:TA2-before 2013;3:MY/TA2/CT2;4:TA3/CT3;5:TA4-before 2013;6:EY/TA4/CT4;9:OVR;D:CW1;E:CW2;F:CW3;G:CW4', defaultValue:'TA1'}, editrules: { required: true }, formoptions:{ rowpos:3, label: "Type"}}, 可以返回整个字段,但是我还需要的是建议者无法提供的每个建议的字数。

1 个答案:

答案 0 :(得分:1)

确实有可能返回整个字段:只需将整个字段标记为一个标记即可。

在我的schema.xml(从sunspot-solr配置中修改)中,我具有以下字段:

<dynamicField name="*_text" stored="true" type="text" multiValued="true" indexed="true"/>
<field name="autocomplete" stored="true" type="autocomplete" multiValued="true" indexed="true"/>
<copyField source="*_text"  dest="autocomplete" />

这个令牌生成器:

<fieldType name="autocomplete" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

如您所见,自动完成字段使用KeywordTokenizerFactory将整个字符串标记为单个标记。因此,自动完成程序将在请求时返回整个字符串。