#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-мя символами. Спасибо.