Как получить доступ к groupedValue в группировке запросов Solr

#jquery #solr

#jquery #solr

Вопрос:

У меня возникла некоторая проблема с доступом к 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=trueamp;group.field=strSOamp;rows=2147483647amp;q=strSO:";
    var URL_SUFFIX = "amp;wt=json"; // facet.field=strSOamp;facet=onamp;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=trueamp;group.field=strSOamp;rows=2147483647amp;q=strSO:";
    var URL_MIDDLE = "OR strSO_ngram:";
    var URL_SUFFIX = "amp;wt=json"; // amp;facet.field=strSOamp;facet=onamp;rows=0"; // amp;facet.field=strSOamp;facet=onamp;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? Это последняя часть моего проекта, и если я сделаю это правильно, я буду более счастливым человеком 🙂

Ответ №1:

Вам не нужно использовать метод 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>  

Комментарии:

1. Я пробовал это, но метка автозаполнения ничего не показывает. : (Можно ли получить доступ к документам doclists?

2. Нет, я пробовал оба из них, но метка автозаполнения ничего не показывает.

3. Хорошо, я сделал это. Но у меня есть другой вопрос. Выпадающий список автозаполнения появляется после записи 7 символов в label. Есть ли какое-либо решение, чтобы сделать его 2-мя символами. Спасибо.