ruflin / Elastica

Elastica is a PHP client for elasticsearch
http://elastica.io/
MIT License
2.26k stars 733 forks source link

Cannot decode result with javascript when indexing documents with line breaks #860

Closed 3m0 closed 8 years ago

3m0 commented 9 years ago

I've indexed my documents using elastica, but when I try to retrieve them via ajax, the browsers fail to parse it to a JSON object. By analyzing the string, it seems that it is not escaping the line breaks correctly when indexing, like \n should be \n. I'm using php 54 currently with elasticsearch 1.5

im-denisenko commented 9 years ago

Hello. Could you please provide script that can be used to reproduce this error?

3m0 commented 9 years ago

Sure, but do you mind if I ommit the server IP address?

im-denisenko commented 9 years ago

Okay. localhost is fine.

3m0 commented 9 years ago

OK, here: http://codepen.io/anon/pen/BNQzNj

im-denisenko commented 9 years ago

@3m0 Try to specify explicitly that you expect json object:

$.ajax('http://localhost:9200/store/1_31/_search?q=test', {
    dataType: 'json',
    success: function(data) {
        console.log(data);
    }
});

I'm not sure that this is Elastica's issue, but if this doesn't help, please add more info: index mapping, document example, expected result, actual result, error message.

3m0 commented 9 years ago

Nope, even specifying the dataType wasn't enough. The browser still throws a parsing error. As you asked, I'm sending my mappings and a search result containing the documents. Basically it looks like PHP's json_encode is generating an javascript incompatible JSON object by replacing line breaks with \n instead of \n. Maybe add_slashes after encoding could work? Well, here ara my mappings:

{
  "store" : {
    "mappings" : {
      "1_31" : {
        "_all" : {
          "enabled" : true,
          "analyzer" : "pt_analyzer"
        },
        "properties" : {
          "accid" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "appid" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "authors" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "big_images" : {
            "type" : "string"
          },
          "code" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "description" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "discountpercentage" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "discountpercentagebillet" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "discountvalue" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "discountvaluebillet" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "fileurl" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "gift" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "giftAmount" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "giftValue" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "id" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "isbn" : {
            "type" : "string"
          },
          "keywords" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "level" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "mid_images" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "page" : {
            "type" : "string"
          },
          "postdate" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "price" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "priceField" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "programmingstock" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "promotional" : {
            "type" : "string"
          },
          "provider" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "quantity" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "sales" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "search" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "size" : {
            "type" : "string"
          },
          "small_images" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "stock" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "tags" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "thumburl" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "type" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "user" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "value" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          },
          "weight" : {
            "type" : "string",
            "analyzer" : "pt_analyzer",
            "include_in_all" : true
          }
        }
      }
    }
  }
}

And here's the search result (with ?pretty to maike easier to read):

{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 58,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "63544",
      "_score" : 1.0,
      "_source":{"id":63544,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"MULHERES NA BIBLIA No Novo Testamento vol 3- Devocional","description":"Este livro fará você mergulhar no tempo da igreja cristã primitiva e analisar o pensamento e as ações de mulheres da época. São histórias emocionantes que vão mexer com você.\r\nAlgumas das personagens conheceram Jesus de perto enquanto Ele esteve aqui na terra. Suas experiências como pessoas que o reconheceram como o Messias e presenciaram maravilhas faz delas mulheres muito privilegiadas.\r\nEssas mulheres, porém, já se foram. O relato sobre elas é o que permanece, para que possamos aprender lições. Hoje, somos nós que fazemos história. Nós somos as mulheres que podem ser transformadas por Deus. Ele tem poder para restaurar vidas ainda hoje. Inspire-se nas histórias antigas dentro deste livro e deixe que Deus fale com você.","fileurl":"//z3.vethia.com.br/uploads/mulheres-na-biblia-no-novo-testamento-vol-3-devocional-63544-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/mulheres-na-biblia-no-novo-testamento-vol-3-devocional-63544-1-g.jpg","price":12.9,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":20,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"","page":"134","size":"14.0x21.0","promotional":"N","small_images":"//z3.vethia.com.br/uploads/mulheres-na-biblia-no-novo-testamento-vol-3-devocional-63544-1-p.jpg,","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "58526",
      "_score" : 1.0,
      "_source":{"id":58526,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"NOVO TESTAMENTO SOLO Marrom","description":"A Mensagem: Solo - Novo Testamento\r\nUm Devocional que foi projetado para ensiná-lo a estudar a Bíblia e a desenvolver uma conversa íntima entre você e Deus.\r\nEste livro apresenta devocionais baseados no clássico método lectio divina: ler, pensar, orar e viver as Escrituras com a intenção de convidar o Deus infinito e onisciente a fazer morada em sua vida. A Mensagem: Solo - Novo Testamento nos ensina a viver a Bíblia, não somente estudá-la, nos instrui a absorver e meditar nas Escrituras, a conversar com Deus abertamente e a viver o que já se tornou parte de nós - Sua Palavra.\r\nVocê aprenderá a silenciar sua voz e as vozes da responsabilidade, do ego, da família e até mesmo da religião, a fim de ouvir o que Deus tem a dizer.","fileurl":"//z3.vethia.com.br/uploads/novo-testamento-solo-marrom-58526-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/novo-testamento-solo-marrom-58526-1-g.jpg","price":19.9,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":20,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"","page":"300","size":"0.0x0.0","promotional":"N","small_images":"//z3.vethia.com.br/uploads/novo-testamento-solo-marrom-58526-1-p.jpg,","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "57302",
      "_score" : 1.0,
      "_source":{"id":57302,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"LUCY DETESTA COR DE ROSA","description":"Toda menina gosta de cor-de-rosa... Blusa rosa, batom rosa, esmalte rosa, bolsa rosa. Mas Lucy não. Ela não é uma garota comum, que gosta do que todo mundo gosta, que faz o que todo mundo faz. \r\n\r\nCrescer sem a mãe e com a responsabilidade de cuidar da casa e do pai é muito difícil para uma menina, mas Lucy sabe que pode contar com a ajuda de Deus pra passar por cima dos problemas e ter uma vida normal. E ser feliz!\r\n\r\nLucy é diferente, sua vida é diferente... Mas é uma garota como você, também tem sonhos, medos, conflitos e segredos. \r\n\r\nDescubra com ela que ser diferente não é tão ruim assim!","fileurl":"//z3.vethia.com.br/uploads/lucy-detesta-cor-de-rosa-57302-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/lucy-detesta-cor-de-rosa-57302-1-g.jpg","price":29.9,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":20,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"","page":"304","size":"14.0x21.0","promotional":"N","small_images":"","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "56974",
      "_score" : 1.0,
      "_source":{"id":56974,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"TEOLOGIA BIBLICA Antigo e Novo Testamentos","description":"O propósito deste livro é nada menos que providneicar um descortinar da mente de Deus na História por meio dos sucessivos agentes da sua Revelação Especial. Geerhardus Vos organizou o assunto em três divisões principais: o período mosaico da Revelação, o período profético da Revelação e o Novo Testamento.\r\nEstudar a Teologia Biblica de Vos será apreciar a obra de quem John Murray definiu comno o mais primoroso exegeta do século 20.","fileurl":"//z3.vethia.com.br/uploads/teologia-biblica-antigo-e-novo-testamentos-56974-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/teologia-biblica-antigo-e-novo-testamentos-56974-1-g.jpg","price":79,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":35,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"9788576223115","page":"496","size":"16.0x23.0","promotional":"S","small_images":"//z3.vethia.com.br/uploads/teologia-biblica-antigo-e-novo-testamentos-56974-1-p.jpg,","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "51638",
      "_score" : 1.0,
      "_source":{"id":51638,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"TEOLOGIA DO NOVO TESTAMENTO H Marshall","description":"Há muito que o público evangélico espera por uma teologia do NT como esta. Ao longo desta obra I. Howard Marshall traz profundas reflexões, fruto de muitos anos de estudo, pesquisa e ensino na área do Novo Testamento.\r\n\r\nPor isso mesmo, não é uma teologia que sucumbe à tendência de enxergar no Novo Testamento uma diversidade que seja irreconciliável. Pelo contrário, o autor defende a existência de uma teologia neotestamentária formada a partir dos diversos testemunhos que encontramos nos livros do NT. E dessa forma, a partir da análise individual dos documentos que compõem o NT, vai passo a passo construindo uma síntese dessa teologia, provando assim sua tese: diversos testemunhos, um só Evangelho.\r\n\r\n\r\n\"Edições Vida Nova está, mais uma vez, de parabéns por oferecer ao estudioso do NT uma obra de primeira qualidade\". Estevan F. Kirschner (Ph.D. em Novo Testamento pelo London Bible College, Inglaterra e professor da área bíblica).","fileurl":"//z3.vethia.com.br/uploads/teologia-do-novo-testamento-h-marshall-51638-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/teologia-do-novo-testamento-h-marshall-51638-1-g.jpg","price":89.9,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":35,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"9788527503792","page":"654","size":"16.0x23.0","promotional":"S","small_images":"//z3.vethia.com.br/uploads/teologia-do-novo-testamento-h-marshall-51638-1-p.jpg,","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "12717",
      "_score" : 1.0,
      "_source":{"id":12717,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"TEOLOGIA DO ANTIGO TESTAMENTO","description":"De fato, os teólogos de perfil reformado certamente receberão com entusiasmo a obra Eichrodt, o mais sistemático de todos os teólogos bíblicos do Antigo Testamento. Além disso, o grande mérito da pena de Eichrodt foi elaborar uma teologia bíblica complexa, exaustiva, unificada e capaz de diálogo com a Teologia Sistemática. Esta é uma obra simplesmente imperdível. Com certeza\r\nserá muito útil na construção do pensamento teológico bíblico brasileiro.","fileurl":"//z3.vethia.com.br/uploads/teologia-do-antigo-testamento-12717-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/teologia-do-antigo-testamento-12717-1-g.jpg","price":133.9,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":1,"discountpercentage":35,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"85-89320-52-9","page":"966","size":"16.0x23.0","promotional":"S","small_images":"","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "12628",
      "_score" : 1.0,
      "_source":{"id":12628,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"CURSO BASICO VOL 2 PANORAMA DO ANTIGO TESTAMENTO","description":"Voltado para leigos,é um curso perfeito para aqueles que desejam conhecer um pouco de teologia numa linguagem informal, instrumental e não acadêmica. O material é altamente didático, informativo e de fácil assimilação. Este volume fornece respostas a perguntas intrigantes como estas: Por que estudar o Antigo Testamento? O Antigo Testamento é realmente menos importante que o Novo? O que Jesus pensava do Antigo Testamento? Qual e a sequência correta  dos livros do Antigo Testamento? Que importância isso tem para o estudo e a compreensão do AT?","fileurl":"//z3.vethia.com.br/uploads/curso-basico-vol-2-panorama-do-antigo-testamento-12628-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/curso-basico-vol-2-panorama-do-antigo-testamento-12628-1-g.jpg","price":49.9,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":35,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"","page":"280","size":"14.0x21.0","promotional":"S","small_images":"","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "11409",
      "_score" : 1.0,
      "_source":{"id":11409,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"FORMA E EXIGENCIAS DO NOVO TESTAMENTO","description":"Este livro foi planejado pelos doutores e exegetas Josef e Gerhard do Antigo e Novo Testamento respectivamente, com base na história da tradição e, orientados por ela, investigam a forma literária mostrando os gêneros e a linguagem, se dedicando à situação existencial. Em se tratando dos livros do Novo Testamento é necessário explicar a formação e a natureza, as forças modeladoras e os elementos determinantes, as afirmações e as instâncias, a finalidade e as exigências. O livro é apresentado em quatro grandes seções: a primeira tenta apresentar a teologia paulina em sua ligação com o cristão primitivo, a segunda se ocupa com o exame dos evangelhos, a terceira compreende tratados monográficos da restante literatura epistolar neotestamentária, a quarta se ocupa especialmente com a escatologia e a apocalíptica. Um livro recomendado para todos aqueles que pretendem aprofundar-se no mundo de fé dos livros sagrados do Novo Testamento.","fileurl":"//z3.vethia.com.br/uploads/forma-e-exigencias-do-novo-testamento-11409-1-g.jpg","thumburl":"//z3.vethia.com.br/uploads/forma-e-exigencias-do-novo-testamento-11409-1-g.jpg","price":67.5,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":1,"discountpercentage":35,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"9788577420193","page":"536","size":"16.5x23.5","promotional":"S","small_images":"","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "8422",
      "_score" : 1.0,
      "_source":{"id":8422,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"INTRODUCAO AO ESTUDO DO NOVO TESTAMENTO","description":"Neste livro o autor apresenta um excelente compendio de introdução do Novo Testamento. Certamente, será de grande valia para pastores, líderes, professores de Escola Dominical e para qualquer pessoa que deseje aprofundar seus conhecimentos no Novo Testamento. Nele você encontrará uma fonte significativa de recursos e atestará sua importância e erudição, comprovando\r\nseu valor como obra de pesquisa séria e bem elaborada, feita com base no mais novo material para a investigação e estudo do Novo Testamento.","fileurl":null,"thumburl":null,"price":41.5,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":35,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"85-88234-24-6","page":"492","size":"14.0x21.0","promotional":"S","small_images":"","mid_images":"","big_images":""}
    }, {
      "_index" : "store",
      "_type" : "1_31",
      "_id" : "8066",
      "_score" : 1.0,
      "_source":{"id":8066,"accid":1,"appid":31,"code":null,"level":0,"sales":0,"name":"NARRATIVAS 4 8a12anos PROFESSOR Novo Testamento Parte 2","description":"Narrativas Bíblicas para Crianças - Novo Testamento em Ordem Cronológica - Revista 4 - Cinza  - Semana da Paixão até Paulo, um Prisioneiro em Roma. \r\nAs páginas iniciais trazem orientações gerais para os professores, além de um plano de aula completo e sugestões para melhor aproveitamento do tempo disponível. A Revista do Professor traz também instruções de como utilizar o material, como fazer aplicações e a importância do uso de Recursos Visuais. Na seqüência vêm as 13 lições. Cada lição traz o texto bíblico base, os objetivos, a apresentação, as aplicações, o versículo para decorar, sugestões de músicas, atividade escrita, atividade manual, jogos-atividade, atividades de recreação, perguntas para verificação da aprendizagem e um espaço em branco para as suas idéias.\r\nA Revista 4 - Cinza - traz a segunda parte do Novo Testamento e conta as seguintes histórias: \r\n1- Jesus: a Entrada Triunfal em Jerusalém \r\n2- Jesus: a Ceia \r\n3- Jesus: Orando e Preso no Getsêmani, e Julgamento \r\n4- Jesus: Sua Crucificação \r\n5- Jesus: Sua Ressurreição \r\n6- Jesus: Sua Ascensão e a Vinda do espírito Santo \r\n7- A Igreja em Jerusalém \r\n8- O Crescimento da Igreja \r\n9- A Igreja se Espalhando Fora de Jerusalém \r\n10- A Primeira Viagem Missionária \r\n11- A Segunda Viagem Missionária \r\n12- A Terceira Viagem Missionária \r\n13- Paulo, o Prisioneiro.","fileurl":null,"thumburl":null,"price":5.95,"type":null,"stock":null,"programmingstock":0,"quantity":1,"weight":0,"discountpercentage":20,"discountvalue":0,"discountpercentagebillet":5,"discountvaluebillet":0,"status":1,"keywords":null,"gift":false,"giftValue":0,"giftAmount":null,"priceField":"price","isbn":"","page":"42","size":"20.0x27.0","promotional":"N","small_images":"","mid_images":"","big_images":""}
    } ]
  }
}
ruflin commented 9 years ago

@3m0 I would assume json_encode returns a full string and doesn't have any line breaks inside. Could it be that you perhaps some special characters inside that have issues with encoding / decoding (I saw you use the portguese analyser). Can you try to reproduce it with a very simple example to better track the problem?

ruflin commented 8 years ago

Closing as no updates provided. Please reopen when needed.