jQuery Autocomplete Solr多个字段

时间:2015-09-16 21:10:48

标签: jquery solr autocomplete

我目前正在尝试为Solr索引实现jquery自动完成功能。在这个solr索引中,我有多个字段,自动完成应该处理。为了简单起见,我目前只处理两个领域:

  • ac_event_title
  • ac_event_information

只要我只想搜索一个字段,它就没有任何问题,但是我不知道如何使用两个或多个字段来实现它,这就是我的代码实际上的样子:

$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“。

1 个答案:

答案 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>