首页 > 解决方案 > 如何在 Solr 查询分组中访问 groupedValue

问题描述

我在 Solr 查询中访问 groupValue 时遇到了一些问题。我想在 jquery 自动完成标签中显示 groupValue。但我做不到。谁能帮我做到这一点?

{
  "responseHeader":{
    "status":0,
    "QTime":29,
    "params":{
      "q":"strSO:*",
      "indent":"true",
      "fl":"strSO",
      "start":"0",
      "rows":"2147483647",
      "wt":"json",
      "group.field":"strSO",
      "group":"true"}},
  "grouped":{
    "strSO":{
      "matches":112559,
      "groups":[{
          "groupValue":"EV11777-01",
          "doclist":{"numFound":53,"start":0,"docs":[
              {
                "strSO":"EV11777-01"}]
          }},
        {
          "groupValue":"EV15872-01",
          "doclist":{"numFound":1829,"start":0,"docs":[
              {
                "strSO":"EV15872-01"}]
          }},
        {
          "groupValue":"EV16143-02",
          "doclist":{"numFound":929,"start":0,"docs":[
              {
                "strSO":"EV16143-02"}]
          }},

这是我的jQuery代码

$(function() {
    var URL_PREFIX = "http://localhost:8983/solr/archiveCore/select?group=true&group.field=strSO&rows=2147483647&q=strSO:";
    var URL_SUFFIX = "&wt=json"; // facet.field=strSO&facet=on&rows=0";
    $("#searchBoxstrSO").autocomplete({
        source: function(request, response) {
            var URL = URL_PREFIX + $("#searchBoxstrSO").val() + URL_SUFFIX;
            $.ajax({
                url: URL,
                success: function(data) {
                    var docs = JSON.stringify(data.grouped.strSO.groups.groupValue);
                    var jsonData = JSON.parse(docs);
                    response($.map(jsonData, function(value, key) {
                        return {
                            label: value
                        }
                    }));
                },
                dataType: 'jsonp',
                jsonp: 'json.wrf'
            });
        },
        minLength: 0
    })
});
$(function() {
    var URL_PREFIX = "http://localhost:8983/solr/archiveCore/select?group=true&group.field=strSO&rows=2147483647&q=strSO:";
    var URL_MIDDLE = "OR strSO_ngram:";
    var URL_SUFFIX = "&wt=json"; // &facet.field=strSO&facet=on&rows=0"; // &facet.field=strSO&facet=on&rows=0 added
    $("#ngramBoxstrSO").autocomplete({
        source: function(request, response) {
            var searchString = "\"" + $("#ngramBoxstrSO").val() + "\"";
            var URL = URL_PREFIX + searchString + URL_MIDDLE +
                searchString + URL_SUFFIX;
            $.ajax({
                url: URL,
                success: function(data) {
                    var docs = JSON.stringify(data.grouped.strSO.groups.groupValue);;
                    var jsonData = JSON.parse(docs);
                    response($.map(jsonData, function(value, key) {
                        return {
                            label: value
                        }
                    }));
                },
                dataType: 'jsonp',
                jsonp: 'json.wrf'
            });
        },
        minLength: 0
    })
});

有没有办法在 html 标签中显示它?或者我可以访问 doclist 的文档吗?这是我项目的最后一部分,如果我做对了,我会更开心的人:)

标签: jquerysolr

解决方案


您不需要使用 stringify 方法,因为它将 javascript 对象转换为字符串。只需确保从 ajax 响应中获取 JSON 对象即可。

var docs = data.grouped.strSO.groups;

$.map(docs, function(value, key) {
    return { label: value.groupValue}
});

我的测试示例:

var data = {
  "responseHeader":{
    "status":0,
    "QTime":29,
    "params":{
      "q":"strSO:*",
      "indent":"true",
      "fl":"strSO",
      "start":"0",
      "rows":"2147483647",
      "wt":"json",
      "group.field":"strSO",
      "group":"true"}},
  "grouped":{
    "strSO":{
      "matches":112559,
      "groups":[{
          "groupValue":"EV11777-01",
          "doclist":{"numFound":53,"start":0,"docs":[
              {
                "strSO":"EV11777-01"}]
          }},
        {
          "groupValue":"EV15872-01",
          "doclist":{"numFound":1829,"start":0,"docs":[
              {
                "strSO":"EV15872-01"}]
          }},
        {
          "groupValue":"EV16143-02",
          "doclist":{"numFound":929,"start":0,"docs":[
              {
                "strSO":"EV16143-02"}]
          }} ]}}};

    var docs = data.grouped.strSO.groups;
    
    var result = $.map(docs, function(value, key) {
        return { label: value.groupValue}
    });
    
    console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


推荐阅读