Как получить доступ к groupedValue в Solr Query Grouping - PullRequest
0 голосов
/ 12 марта 2019

У меня есть проблема с доступом к groupValue в запросе Solr.Я хочу показать groupValue в метке автозаполнения jquery.Но я не могу этого сделать.Может ли кто-нибудь помочь мне сделать это?

{
  "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 label?Или я могу получить доступ к документам доклиста?Это последняя часть моего проекта, и если я сделаю это правильно, я буду более счастливым человеком:)

1 Ответ

1 голос
/ 12 марта 2019

Вам не нужно использовать метод stringify, поскольку он преобразует объект javascript в строку. Просто убедитесь, что вы получаете объект JSON из ответа ajax.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...