【问题标题】:jQuery Autocomplete Solr multiple fieldsjQuery Autocomplete Solr 多个字段
【发布时间】:2015-09-16 21:10:47
【问题描述】:

我目前正在尝试为 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”中显示“ac_event_title”,如果结果在字段“ac_event_information”中显示“ac_event_information”。

【问题讨论】:

  • 不管在哪里,都可以显示所有的文件,因为solr不会告诉你哪个文件被击中了。

标签: jquery solr autocomplete


【解决方案1】:

如果您使用的是 Solr 5.0 及更高版本,则无需为多个字段定义单独的字典。您可以使用copyField 将必填字段复制到新的suggest_field,然后为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>

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 2012-03-02
    • 2011-04-21
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多