vespa
vespa copied to clipboard
Query with `phrase()` fails to match content in the document
Describe the bug
I have a document with a large field content that can be searched, in some situations strings that are in the document end up not being matched
To Reproduce Steps to reproduce the behavior:
- Create a Vespa instance with the Dockerfile found here, it will start a Vespa instance and deploy to it the schema and the document where the bug can be triggered.
- Following the above's link README.md execute the query
select * from diary_page where default contains phrase("JOAO", "PAULO", "MARTINS", "DE", "SOUZA", "BARBOZA")to try the find the text in thecontentfield.
Expected behavior
It is expected that it will match the text JOAO PAULO MARTINS DE SOUZA BARBOZA which is found around 23022714224705600000090540621 Envolvido: JOAO PAULO MARTINS DE SOUZA BARBOZA (POLO: Polo passivo) Advogado: JOAO PAULO MARTINS DE SOUZA BARBOZA (OAB: 0001304S/RN) found in the field content
Screenshots
Environment (please complete the following information):
- OS: vespaengine/vespa docker image
- Infrastructure: Kubernetes and self-hosted
- Versions: N/A
Vespa version 8.224.19 (first seen in Prod), 8.256.22 (Currently confirmed in Prod), 8.263.7 (Current version of the vespaengine/vespa docker image as of reporting this bug)
Additional context
Doing the query select * from diary_page where default contains phrase("JOAO", "PAULO", "MARTINS") will work as expected, as soon as the "DE" is introduced it will fail.
If one queries while omitting the "DE" with select * from diary_page where default contains phrase("JOAO", "PAULO", "MARTINS", "SOUZA", "BARBOZA") it will unexpectedly match (when it should not as there is a DE between MARTINS and SOUZA), and the returned highlighted section is the absolute start of the content field (as seen below)
{
"id": "id:diary_page:diary_page::1",
"relevance": 0.510403676930579,
"source": "Vespa_content",
"fields": {
"sddocname": "diary_page",
"content": "Processo 0812067-63.2022.8.20.0000 Sigla Tribunal: TJRN Órgão: Gab. Des. Expedito Ferreira na Câmara Cível Data de disponibilização: 28/02/2023 Tipo de comunicação: Intimação Classe: AGRAVO DE INSTRUMENTO Meio: Diário Eletrônico de Justiça Nacional Inteiro Teor: https://pje2g.tjrn.jus.br:443/pje/Processo/ConsultaDocumento/listView.seam?x=23022713470018100000017942970 Envolvido: JOSE CARLOS MACHADO ROESSLER (POLO: Polo ativo) Advogado: JOSE CARLOS MACHADO ROESSLER (OAB: 9036/RN) Conteúdo: PODER<sep />",
"documentid": "id:diary_page:diary_page::1",
"filtrado": false,
"id": 459931779
}
}
How large is the content field?
in some situations strings that are in the document end up not being matched
Only the first 1M characters are indexed by default, so it might be that you are experiencing that if this problem is isolated to phrases at the end of the text.
You can alter https://docs.vespa.ai/en/reference/schema-reference.html#max-length to for example 2M and re-feed this document to see if is retrieved.
Here is feed json of the document, the field in question is content.
I modified the schema from the repro repository as follows:
schema diary_page {
stemming: none
document diary_page inherits base_definition {
field id type long {
indexing: summary
}
field content type string {
indexing: index | summary
index: enable-bm25
summary: dynamic
stemming: none
match {
# This is from the field-size example in the documents, replaced 15 with 20
# https://docs.vespa.ai/en/schemas.html#field-size
max-length: 20000000
}
}
}
fieldset default {
fields: content
}
rank-profile default inherits default {
first-phase {
expression {
bm25(content)
}
}
rank-type content: about
}
}
Then:
Stopped the Vespa Docker Container, Deleted the container, Deleted the image based on vespaengine/vespa that is used in that container, Built the new image with the new schema, Started the container with the new image, Deployed new ApplicationPackage, Fed the document
$ vespa query -w 60 'yql=select * from diary_page where default contains phrase("JOAO", "PAULO", "MARTINS", "DE",
"SOUZA", "BARBOZA")'
Waiting up to 1m0s for query service to become available ...
{
"root": {
"id": "toplevel",
"relevance": 1.0,
"fields": {
"totalCount": 0
},
"coverage": {
"coverage": 100,
"documents": 1,
"full": true,
"nodes": 1,
"results": 1,
"resultsFull": 1
}
}
}
the other 2 queries in the Additional Context still produce the same results as stated (normal matches and highlights when matching only JOAO PAULO MARTINS, and matches but weird highlighting when matching JOAO PAULO MARTINS SOUZA BARBOZA)
I suggest you create a document-summary using the tokens transform to see the actual tokens indexed for the content field. Example: https://docs.vespa.ai/en/text-matching.html#tokens-example. It should look something like this:
document-summary debug-content {
summary content { }
summary content_tokens {
source: content
tokens
}
from-disk
}
Then you can correlate these tokens with how the query is transformed using presentation.summary=debug-content&trace.level=2 (https://docs.vespa.ai/en/query-api.html#query-tracing)
Thanks, I have modified the schema and tried again.
Unfortunately, the phrase("JOAO", "PAULO", "MARTINS", "DE", "SOUZA", "BARBOZA") produces no summary as it has no matches, so I tried the one without the DE which produces a match but returns in the summary the absolute start of the document.
Waiting up to 1m0s for query service to become available ...
{
"trace": {
"children": [
{
"message": "Using query profile 'default' of type 'root'"
},
{
"message": "Invoking chain 'vespa' [com.yahoo.prelude.statistics.StatisticsSearcher@native -> com.yahoo.prelude.querytransform.PhrasingSearcher@vespa -> ... -> federation@native]"
},
{
"children": [
{
"message": "Query parsed to: Query currently a placeholder, NullItem encountered."
},
{
"message": "YQL+ query parsed: [select * from diary_page where default contains phrase(\"JOAO\", \"PAULO\", \"MARTINS\", \"SOUZA\", \"BARBOZA\") timeout 10000]"
},
{
"message": "Federating to [Vespa_content]"
},
{
"children": [
{
"message": "Stemming: [select * from diary_page where default contains phrase(\"JOAO\", \"PAULO\", \"MARTINS\", \"SOUZA\", \"BARBOZA\") timeout 9998]"
},
{
"message": "Lowercasing: [select * from diary_page where default contains phrase(({normalizeCase: false}\"joao\"), ({normalizeCase: false}\"paulo\"), ({normalizeCase: false}\"martins\"), ({normalizeCase: false}\"souza\"), ({normalizeCase: false}\"barboza\")) timeout 9998]"
},
{
"message": "sc0.num0 search to dispatch: query=[default:\"joao paulo martins souza barboza\"] timeout=9998ms offset=0 hits=10 groupingSessionCache=true sessionId=2934645e-2653-41b3-8604-98f59d6a08d1.1702548807655.5.default grouping=0 : restrict=[diary_page]"
},
{
"message": "Current state of query tree: PHRASE[explicit=true index=\"default\" uniqueID=1]{\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"joao\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"paulo\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"martins\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"souza\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"barboza\"\n }\n}\n"
},
{
"message": "Dispatching to search node in cluster = dispatcher.Vespa_content key = 0 hostname = 515919ece776 path = 0 in group 0 statusIsKnown = true working = true activeDocs = 1 targetActiveDocs = 1"
},
{
"message": "sc0.num0 dispatch response: Result (1 of total 1 hits)"
},
{
"message": "sc0.num0 fill to dispatch: query=[default:\"joao paulo martins souza barboza\"] timeout=9998ms offset=0 hits=10 groupingSessionCache=true sessionId=2934645e-2653-41b3-8604-98f59d6a08d1.1702548807655.5.default grouping=0 : restrict=[diary_page] summary='debug-content'"
},
{
"message": "Current state of query tree: PHRASE[explicit=true index=\"default\" uniqueID=1]{\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"joao\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"paulo\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"martins\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"souza\"\n }\n WORD[fromSegmented=false index=\"default\" origin=null segmentIndex=0 stemmed=false words=true]{\n \"barboza\"\n }\n}\n"
}
]
}
]
}
]
},
"root": {
"id": "toplevel",
"relevance": 1.0,
"fields": {
"totalCount": 1
},
"coverage": {
"coverage": 100,
"documents": 1,
"full": true,
"nodes": 1,
"results": 1,
"resultsFull": 1
},
"children": [
{
"id": "index:Vespa_content/0/c4ca423853b8799c572f2234",
"relevance": 0.510403676930579,
"source": "Vespa_content",
"fields": {
"sddocname": "diary_page",
"content": "Processo 0812067-63.2022.8.20.0000 Sigla Tribunal: TJRN Órgão: Gab. Des. Expedito Ferreira na Câmara Cível Data de disponibilização: 28/02/2023 Tipo de comunicação: Intimação Classe: AGRAVO DE INSTRUMENTO Meio: Diário Eletrônico de Justiça Nacional Inteiro Teor: https://pje2g.tjrn.jus.br:443/pje/Processo/ConsultaDocumento/listView.seam?x=23022713470018100000017942970 Envolvido: JOSE CARLOS MACHADO ROESSLER (POLO: Polo ativo) Advogado: JOSE CARLOS MACHADO ROESSLER (OAB: 9036/RN) Conteúdo: PODER<sep />",
"content_tokens": [
"processo",
"0812067",
"63",
"2022",
"8",
"20",
"0000",
"sigla",
"tribunal",
"tjrn",
"orgao",
"gab",
"des",
"expedito",
"ferreira",
"na",
"camara",
"civel",
"data",
"de",
"disponibilizacao",
"28",
"02",
"2023",
"tipo",
"de",
"comunicacao",
"intimacao",
"classe",
"agravo",
"de",
"instrumento",
"meio",
"diario",
"eletronico",
"de",
"justica",
"nacional",
"inteiro",
"teor",
"https",
"pje2g",
"tjrn",
"jus",
"br",
"443",
"pje",
"processo",
"consultadocumento",
"listview",
"seam",
"x",
"23022713470018100000017942970",
"envolvido",
"jose",
"carlos",
"machado",
"roessler",
"polo",
"polo",
"ativo",
"advogado",
"jose",
"carlos",
"machado",
"roessler",
"oab",
"9036",
"rn",
"conteudo",
"poder",
"judiciario",
"do",
"estado",
"do",
"rio",
"grande",
"do",
"norte",
"gab",
"des",
"expedito",
"ferreira",
"na",
"camara",
"civel",
"processo",
"0812067",
"63",
"2022",
"8",
"20",
"0000",
"agravo",
"de",
"instrumento",
"202",
"agravante",
"hidromineracao",
"natal",
"eireli",
"epp",
"ster",
"bom",
"ind",
"e",
"com",
"ltda",
"advogado",
"s",
"jose",
"carlos",
"machado",
"roessler",
"agravado",
"eleno",
"alberto",
"da",
"silva",
"advogado",
"s",
"miecio",
"cabral",
"de",
"vasconcelos",
"relator",
"desembargador",
"expedito",
"ferreira",
"de",
"souza",
"despacho",
"compulsando",
"os",
"autos",
"verifico",
"que",
"a",
"recorrida",
"sustenta",
"a",
"preliminar",
"de",
"nao",
"conhecimento",
"do",
"agravo",
"por",
"ofensa",
"ao",
"principio",
"da",
"dialeticidade",
"de",
"ausencia",
"de",
"norma",
"autorizadora",
"capaz",
"de",
"reconhecer",
"a",
"interposicao",
"do",
"rescurso",
"de",
"agravo",
"de",
"instrumento",
"em",
"face",
"de",
"decisao",
"que",
"nao",
"acolheu",
"preliminar",
"de",
"ilegitimidade",
"passiva",
"uma",
"vez",
"que",
"a",
"continuidade",
"da",
"parte",
"no",
"processo",
"nao",
"trara",
"prejuizos",
"ao",
"processo",
"como",
"na",
"hipotese",
"de",
"se",
"excluir",
"um",
"litisconsorte",
"e",
"em",
"momento",
"posterior",
"constatar",
"se",
"a",
"condicao",
"de",
"litisconsorte",
"necessario",
"onde",
"toda",
"instrucao",
"restaria",
"prejudicada",
"o",
"art",
"10",
"do",
"codigo",
"de",
"processo",
"civil",
"preve",
"que",
"o",
"juiz",
"nao",
"pode",
"decidir",
"em",
"grau",
"algum",
"de",
"jurisdicao",
"com",
"base",
"em",
"fundamento",
"a",
"respeito",
"do",
"qual",
"nao",
"se",
"tenha",
"dado",
"as",
"partes",
"oportunidade",
"de",
"se",
"manifestar",
"ainda",
"que",
"se",
"trate",
"de",
"materia",
"sobre",
"a",
"qual",
"deva",
"decidir",
"de",
"oficio",
"desta",
"forma",
"intime",
"se",
"a",
"parte",
"recorrente",
"para",
"querendo",
"manifestar",
"se",
"no",
"prazo",
"de",
"10",
"dez",
"dias",
"sobre",
"a",
"preliminar",
"arguida",
"pelo",
"recorrido",
"apos",
"o",
"decurso",
"do",
"prazo",
"com",
"ou",
"sem",
"manifestacao",
"da",
"parte",
"facam",
"os",
"autos",
"conclusos",
"publique",
"se",
"intime",
"se",
"cumpra",
"se",
"natal",
"rn",
"data",
"do",
"registro",
"eletronico",
"des",
"expedito",
"ferreira",
"de",
"souza",
"relator",
"processo",
"0800123",
"74",
"2021",
"8",
"20",
"5149",
"sigla",
"tribunal",
"tjrn",
"orgao",
"gab",
"des",
"expedito",
"ferreira",
"na",
"camara",
"civel",
"data",
"de",
"disponibilizacao",
"28",
"02",
"2023",
"tipo",
"de",
"comunicacao",
"intimacao",
"classe",
"apelacao",
"civel",
"meio",
"diario",
"eletronico",
"de",
"justica",
"nacional",
"inteiro",
"teor",
"https",
"pje2g",
"tjrn",
"jus",
"br",
"443",
"pje",
"processo",
"consultadocumento",
"listview",
"seam",
"x",
"23022314432040200000017908384",
"envolvido",
"eugenio",
"rosendo",
"de",
"souza",
"polo",
"polo",
"ativo",
"envolvido",
"fernanda",
"rafaella",
"oliveira",
"de",
"carvalho",
"polo",
"polo",
"passivo",
"envolvido",
"sesiom",
"figueiredo",
"da",
"silveira",
"polo",
"polo",
"ativo",
"advogados",
"fernanda",
"rafaella",
"oliveira",
"de",
"carvalho",
"oab",
"32766",
"pe",
"eugenio",
"rosendo",
"de",
"souza",
"oab",
"18354",
"rn",
"sesiom",
"figueiredo",
"da",
"silveira",
"oab",
"3331",
"rn",
"conteudo",
"poder",
"judiciario",
"tribunal",
"de",
"justica",
"do",
"estado",
"do",
"rio",
"grande",
"do",
"norte",
"primeira",
"camara",
"civel",
"processo",
"apelacao",
"civel",
"0800123",
"74",
"2021",
"8",
"20",
"5149",
"polo",
"ativo",
"maria",
"odete",
"de",
"souza",
"silva",
"advogado",
"s",
"sesiom",
"figueiredo",
"da",
"silveira",
"eugenio",
"rosendo",
"de",
"souza",
"polo",
"passivo",
"banco",
"c6",
"consignado",
"s",
"a",
"advogado",
"s",
"fernanda",
"rafaella",
"oliveira",
"de",
"carvalho",
"ementa",
"direito",
"do",
"consumidor",
"e",
"processual",
"civil",
"apelacao",
"civel",
"acao",
"de",
"obrigacao",
"de",
"fazer",
"com",
"pedido",
"de",
"tutela",
"de",
"urgencia",
"comprovacao",
"da",
"relacao",
"juridica",
"entre",
"as",
"partes",
"existencia",
"de",
"contrato",
"pactuado",
"entre",
"as",
"partes",
"inexistencia",
"de",
"motivos",
"para",
"decretacao",
"da",
"nulidade",
"do",
"contrato",
"manutencao",
"da",
"sentenca",
"que",
"se",
"impoe",
"recurso",
"conhecido",
"e",
"desprovido",
"acordao",
"acordam",
"os",
"desembargadores",
"da",
"segunda",
"turma",
"da",
"primeira",
"camara",
"civel",
"do",
"tribunal",
"de",
"justica",
"do",
"estado",
"do",
"rio",
"grande",
"do",
"norte",
"a",
"unanimidade",
"de",
"votos",
"em",
"conhecer",
"e",
"negar",
"provimento",
"a",
"apelacao",
"nos",
"termos",
"do",
"voto",
"do",
"relator",
"relatorio",
"trata",
"se",
"de",
"apelacao",
"civel",
"interposta",
"por",
"maria",
"odete",
"de",
"souza",
"silva",
"em",
"face",
"de",
"sentenca",
"proferida",
"pelo",
"juizo",
"da",
"2a",
"vara",
"civel",
"da",
"comarca",
"de",
"joao",
"camara",
"id",
"17751675",
"que",
"em",
"sede",
"de",
"acao",
"indenizatoria",
"julgou",
"improcedente",
"a",
"pretensao",
"autoral",
"no",
"mesmo",
"dispositivo",
"condenou",
"a",
"autora",
"ao",
"pagamento",
"das",
"despesas",
"processuais",
"e",
"honorarios",
"advocaticios",
"estes",
"fixados",
"em",
"10",
"dez",
"por",
"cento",
"do",
"valor",
"da",
"causa",
"restando",
"suspensa",
"a",
"cobranca",
"por",
"ser",
"a",
"parte",
"beneficiaria",
"da",
"justica",
"gratuita",
"em",
"suas",
"razoes",
"recursais",
"id",
"17751677",
"a",
"apelante",
"aduz",
"que",
"a",
"recorrida",
"celebrou",
"um",
"contrato",
"de",
"financiamento",
"sem",
"a",
"mesma",
"ter",
"a",
"ciencia",
"do",
"que",
"estaria",
"sendo",
"assinado",
"por",
"se",
"tratar",
"de",
"pessoa",
"simples",
"e",
"pouco",
"estudada",
"esclarece",
"que",
"o",
"valor",
"depositado",
"em",
"sua",
"conta",
"continua",
"intocado",
"ate",
"os",
"dias",
"atuais",
"e",
"que",
"se",
"dispoe",
"a",
"devolver",
"a",
"recorrida",
"por",
"fim",
"requer",
"seja",
"conhecida",
"e",
"provida",
"a",
"apelacao",
"nas",
"contrarrazoes",
"id",
"17751681",
"a",
"parte",
"recorrida",
"aduz",
"que",
"nao",
"ha",
"nenhum",
"ilicito",
"praticado",
"pelo",
"banco",
"uma",
"vez",
"que",
"nos",
"autos",
"consta",
"contrato",
"assinado",
"bem",
"como",
"a",
"entrega",
"do",
"referido",
"objeto",
"assegura",
"que",
"de",
"uma",
"simples",
"leitura",
"do",
"recurso",
"de",
"apelacao",
"e",
"possivel",
"constatar",
"que",
"a",
"parte",
"apelante",
"apresenta",
"meras",
"alegacoes",
"que",
"nao",
"sao",
"acompanhadas",
"por",
"provas",
"que",
"as",
"sustentem",
"ocorre",
"que",
"nada",
"obstante",
"a",
"relacao",
"juridica",
"dos",
"litigantes",
"ser",
"de",
"consumo",
"e",
"ainda",
"que",
"a",
"parte",
"apelante",
"esteja",
"na",
"posicao",
"de",
"consumidora",
"tal",
"fato",
"nao",
"afasta",
"a",
"necessidade",
"de",
"se",
"provar",
"o",
"fato",
"constitutivo",
"do",
"direito",
"alegado",
"consoante",
"disposto",
"no",
"artigo",
"373",
"inciso",
"i",
"do",
"codigo",
"de",
"processo",
"civil",
"afirma",
"que",
"por",
"outro",
"lado",
"a",
"empresa",
"ora",
"apelada",
"juntou",
"anteriormente",
"em",
"sua",
"contestacao",
"o",
"instrumento",
"contratual",
"atestando",
"que",
"no",
"dia",
"30",
"11",
"2020",
"a",
"parte",
"apelante",
"contratou",
"junto",
"ao",
"recorrido",
"emprestimo",
"consignado",
"pelo",
"qual",
"adquiriu",
"credito",
"no",
"valor",
"total",
"de",
"r",
"3",
"973",
"60",
"tres",
"mil",
"novecentos",
"e",
"setenta",
"e",
"tres",
"reais",
"e",
"sessenta",
"centavos",
"referente",
"ao",
"emprestimo",
"reclamado",
"e",
"nao",
"reconhecido",
"pela",
"parte",
"apelante",
"sendo",
"flagrante",
"a",
"semelhanca",
"entre",
"a",
"assinatura",
"deste",
"instrumento",
"e",
"do",
"rg",
"assegura",
"que",
"nao",
"ocorreu",
"falha",
"no",
"servico",
"e",
"que",
"a",
"contratacao",
"foi",
"legal",
"nao",
"existindo",
"danos",
"a",
"serem",
"reparados",
"bem",
"como",
"nao",
"deve",
"ser",
"aplicado",
"o",
"art",
"42",
"do",
"codigo",
"de",
"processo",
"civil",
"nao",
"havendo",
"que",
"se",
"falar",
"em",
"restituicao",
"em",
"dobro",
"por",
"fim",
"requer",
"o",
"desprovimento",
"do",
"apelo",
"instado",
"a",
"se",
"manifestar",
"o",
"ministerio",
"publico",
"deixou",
"de",
"manifestar",
"por",
"ausencia",
"de",
"interesse",
"publico",
"id",
"17794416",
"e",
"o",
"relatorio",
"voto",
"preenchidos",
"os",
"requisitos",
"de",
"admissibilidade",
"voto",
"pelo",
"conhecimento",
"da",
"apelacao",
"civel",
"cinge",
"se",
"o",
"merito",
"recursal",
"em",
"perquirir",
"acerca",
"da",
"existencia",
"de",
"fraude",
"na",
"contratacao",
"de",
"emprestimo",
"junto",
"ao",
"banco",
"requerido",
"bem",
"como",
"a",
"possibilidade",
"da",
"parte",
"autora",
"ser",
"indenizada",
"a",
"titulo",
"de",
"dano",
"moral",
"e",
"material",
"desde",
"logo",
"cumpre",
"fixar",
"que",
"o",
"caso",
"vertente",
"deve",
"ser",
"apreciado",
"sob",
"o",
"manto",
"da",
"teoria",
"da",
"responsabilidade",
"objetiva",
"aplicando",
"se",
"os",
"preceitos",
"insculpidos",
"pelo",
"codigo",
"de",
"defesa",
"do",
"consumidor",
"sobretudo",
"o",
"disposto",
"em",
"seu",
"art",
"14",
"caput",
"que",
"prescreve",
"art",
"14",
"o",
"fornecedor",
"de",
"servicos",
"responde",
"independentemente",
"da",
"existencia",
"de",
"culpa",
"pela",
"reparacao",
"dos",
"danos",
"causados",
"aos",
"consumidores",
"por",
"defeitos",
"relativos",
"a",
"prestacao",
"dos",
"servicos",
"bem",
"como",
"por",
"informacoes",
"insuficientes",
"ou",
"inadequadas",
"sobre",
"sua",
"fruicao",
"e",
"riscos",
"temos",
"ainda",
"as",
"causas",
"que",
"comprovadas",
"isentam",
"os",
"fornecedores",
"de",
"servicos",
"do",
"dever",
"de",
"indenizatorio",
"previsto",
"no",
"3o",
"do",
"citado",
"dispositivo",
"3o",
"o",
"fornecedor",
"de",
"servicos",
"so",
"nao",
"sera",
"responsabilizado",
"quando",
"provar",
"i",
"que",
"tendo",
"prestado",
"o",
"servico",
"o",
"defeito",
"inexiste",
"ii",
"a",
"culpa",
"exclusiva",
"do",
"consumidor",
"ou",
"de",
"terceiro",
"dos",
"autos",
"verifica",
"se",
"que",
"a",
"pretensao",
"recursal",
"nao",
"merece",
"acolhimento",
"com",
"efeito",
"conforme",
"se",
"depreende",
"pelo",
"estudo",
"do",
"caderno",
"processual",
"diferentemente",
"do",
"alegado",
"na",
"inicial",
"ha",
"contrato",
"entre",
"as",
"partes",
"estando",
"o",
"documento",
"devidamente",
"assinado",
"pela",
"autora",
"id",
"17751639",
"nesse",
"sentido",
"o",
"julgador",
"a",
"quo",
"decidiu",
"vejamos",
"assim",
"nao",
"havendo",
"como",
"impor",
"ao",
"demandante",
"a",
"apresentacao",
"de",
"maiores",
"elementos",
"probatorios",
"afetos",
"a",
"situacao",
"esposada",
"caberia",
"ao",
"demandando",
"comprovar",
"a",
"existencia",
"de",
"contrato",
"nesse",
"ponto",
"insta",
"salientar",
"que",
"o",
"demandado",
"colacionou",
"aos",
"autos",
"copia",
"do",
"contrato",
"que",
"daria",
"origem",
"a",
"cobranca",
"72638418",
"com",
"assinatura",
"que",
"e",
"atribuida",
"ao",
"autor",
"bem",
"como",
"comprovante",
"de",
"ted",
"liberatorio",
"do",
"valor",
"em",
"uma",
"analise",
"sem",
"o",
"rigor",
"da",
"pericia",
"tecnica",
"destaco",
"que",
"assinatura",
"posta",
"no",
"instrumento",
"contratual",
"se",
"assemelha",
"a",
"lancada",
"na",
"procuracao",
"e",
"documentos",
"pessoais",
"do",
"autor",
"possuindo",
"aparente",
"autenticidade",
"oportunizada",
"a",
"apresentacao",
"de",
"replica",
"e",
"impugnacao",
"aos",
"documentos",
"apresentados",
"a",
"autora",
"limitou",
"se",
"a",
"confirmar",
"o",
"credito",
"do",
"valor",
"do",
"emprestimo",
"em",
"sua",
"poupanca",
"nao",
"se",
"insurgindo",
"contra",
"a",
"autenticidade",
"e",
"veracidade",
"dos",
"documentos",
"juntados",
"na",
"contestacao",
"notadamente",
"o",
"contrato",
"assinado",
"consoante",
"inteligencia",
"do",
"art",
"411",
"iii",
"cpc",
"considera",
"se",
"autentico",
"o",
"documento",
"que",
"nao",
"foi",
"impugnado",
"pela",
"parte",
"contra",
"quem",
"foi",
"produzido",
"ou",
"seja",
"sendo",
"apresentado",
"o",
"contrato",
"pelo",
"demandado",
"caberia",
"ao",
"autor",
"se",
"insurgir",
"contra",
"a",
"sua",
"regularidade",
"e",
"autenticidade",
"da",
"assinatura",
"posta",
"nao",
"tendo",
"assim",
"agido",
"e",
"se",
"presumir",
"reconhecer",
"a",
"autenticidade",
"da",
"assinatura",
"ademais",
"a",
"propria",
"autora",
"reconhece",
"que",
"o",
"valor",
"do",
"emprestimo",
"lhe",
"foi",
"devidamente",
"disponibilizado",
"dessa",
"forma",
"e",
"de",
"se",
"reconhecer",
"a",
"regularidade",
"da",
"contratacao",
"a",
"e",
"improcedencia",
"dos",
"pedidos",
"autorais",
"portanto",
"observa",
"se",
"que",
"a",
"parte",
"apelada",
"demonstrou",
"o",
"vinculo",
"juridico",
"havido",
"com",
"o",
"autor",
"nao",
"havendo",
"prova",
"que",
"possa",
"evidenciar",
"a",
"natureza",
"ilegitima",
"da",
"cobranca",
"nesse",
"sentido",
"e",
"a",
"jurisprudencia",
"desta",
"corte",
"de",
"justica",
"ementa",
"direito",
"processual",
"civil",
"acao",
"ordinaria",
"alegada",
"inexistencia",
"de",
"debito",
"contrato",
"de",
"cartao",
"de",
"credito",
"com",
"debito",
"consignado",
"relacao",
"contratual",
"comprovada",
"inadimplencia",
"demonstrada",
"compras",
"realizadas",
"dever",
"de",
"restituir",
"afastado",
"inexistencia",
"de",
"danos",
"morais",
"sentenca",
"reformada",
"precedentes",
"recurso",
"conhecido",
"e",
"provido",
"apelacao",
"civel",
"no",
"2018",
"003137",
"8",
"3a",
"camara",
"civel",
"relator",
"des",
"vivaldo",
"pinheiro",
"julgado",
"em",
"03",
"09",
"2019",
"destaques",
"acrescidos",
"civil",
"processual",
"civil",
"e",
"consumidor",
"apelacao",
"civel",
"acao",
"declaratoria",
"de",
"inexistencia",
"de",
"debito",
"c",
"c",
"indenizacao",
"por",
"danos",
"morais",
"e",
"materiais",
"relacao",
"de",
"consumo",
"alegacao",
"de",
"cobranca",
"indevida",
"decorrente",
"de",
"servico",
"nao",
"contratado",
"juntada",
"de",
"documentos",
"em",
"que",
"consta",
"a",
"assinatura",
"da",
"contratante",
"e",
"faturas",
"relacionadas",
"ao",
"servico",
"prestado",
"consumidor",
"que",
"foi",
"beneficiario",
"de",
"montante",
"proveniente",
"de",
"emprestimo",
"realizado",
"com",
"cartao",
"de",
"credito",
"legitimidade",
"dos",
"descontos",
"na",
"remuneracao",
"da",
"parte",
"autora",
"inexistencia",
"da",
"configuracao",
"dos",
"requisitos",
"necessarios",
"ao",
"dever",
"de",
"indenizar",
"arts",
"186",
"e",
"927",
"do",
"codigo",
"civil",
"recurso",
"conhecido",
"e",
"desprovido",
"apelacao",
"civel",
"n",
"\u00B0",
"2017",
"014024",
"1",
"3a",
"camara",
"civel",
"relator",
"desembargador",
"vivaldo",
"pinheiro",
"julgado",
"a",
"unanimidade",
"em",
"28",
"05",
"19",
"destaques",
"acrescidos",
"civil",
"e",
"processual",
"civil",
"reparacao",
"por",
"danos",
"materiais",
"e",
"morais",
"emprestimo",
"realizado",
"com",
"cartao",
"de",
"credito",
"consignado",
"contrato",
"devidamente",
"assinado",
"pacto",
"que",
"preve",
"a",
"possibilidade",
"de",
"ser",
"descontado",
"o",
"valor",
"minimo",
"devido",
"diretamente",
"da",
"folha",
"de",
"pagamento",
"consumidor",
"que",
"foi",
"beneficiario",
"de",
"montante",
"proveniente",
"do",
"referido",
"emprestimo",
"legitimidade",
"dos",
"descontos",
"na",
"remuneracao",
"da",
"parte",
"autora",
"inexistencia",
"da",
"configuracao",
"dos",
"requisitos",
"necessarios",
"ao",
"dever",
"de",
"indenizar",
"arts",
"186",
"e",
"927",
"do",
"codigo",
"civil",
"majoracao",
"dos",
"honorarios",
"advocaticos",
"de",
"sucumbencia",
"nos",
"termos",
"do",
"art",
"85",
"11",
"do",
"cpc",
"2015",
"e",
"enunciado",
"administrativo",
"no",
"7",
"do",
"stj",
"conhecimento",
"e",
"desprovimento",
"do",
"recurso",
"precedentes",
"a",
"obrigacao",
"de",
"indenizar",
"assenta",
"se",
"na",
"demonstracao",
"do",
"fato",
"ilicito",
"da",
"existencia",
"do",
"dano",
"efetivo",
"do",
"nexo",
"de",
"causalidade",
"entre",
"ambos",
"e",
"ainda",
"quando",
"subjetiva",
"da",
"culpa",
"ou",
"dolo",
"pressupostos",
"que",
"se",
"nao",
"demonstrados",
"afastam",
"a",
"responsabilidade",
"civil",
"nao",
"caracterizada",
"a",
"ilicitude",
"da",
"conduta",
"resta",
"afastado",
"o",
"dever",
"indenizar",
"apelacao",
"civel",
"no",
"2018",
"008934",
"8",
"tj",
"rn",
"3a",
"camara",
"civel",
"relator",
"des",
"joao",
"reboucas",
"julgado",
"em",
"18",
"12",
"2018",
"destaques",
"acrescidos",
"por",
"fim",
"com",
"fundamento",
"no",
"art",
"85",
"11",
"do",
"codigo",
"ritos",
"majoro",
"a",
"verba",
"honoraria",
"10",
"dez",
"por",
"cento",
"para",
"12",
"doze",
"por",
"cento",
"do",
"valor",
"da",
"causa",
"pelo",
"exposto",
"conheco",
"e",
"nego",
"provimento",
"ao",
"apelo",
"e",
"como",
"voto",
"natal",
"data",
"do",
"registro",
"eletronico",
"natal",
"rn",
"14",
"fevereiro",
"2023",
"processo",
"0100698",
"07",
"2018",
"8",
"20",
"0113",
"sigla",
"tribunal",
"tjrn",
"orgao",
"2a",
"vara",
"da",
"comarca",
"areia",
"branca",
"data",
"disponibilizacao",
"28",
"02",
"2023",
"tipo",
"comunicacao",
"intimacao",
"classe",
"procedimento",
"comum",
"civel",
"meio",
"diario",
"eletronico",
"justica",
"nacional",
"inteiro",
"teor",
"https",
"pje1g",
"tjrn",
"jus",
"br",
"443",
"pje",
"processo",
"consultadocumento",
"listview",
"seam",
"x",
"23022714211886100000090539962",
"envolvido",
"antonia",
"ihascara",
"cardoso",
"alves",
"polo",
"polo",
"ativo",
"envolvido",
"leonardo",
"mike",
"silva",
"pereira",
"polo",
"polo",
"ativo",
"envolvido",
"marcelo",
"vitor",
"jales",
"rodrigues",
"polo",
"polo",
"ativo",
"advogados",
"antonia",
"ihascara",
"cardoso",
"alves",
"oab",
"14403",
"rn",
"marcelo",
"vitor",
"jales",
"rodrigues",
"oab",
"9732",
"rn",
"leonardo",
"mike",
"silva",
"pereira",
"oab",
"0010615a",
"rn",
"conteudo",
"poder",
"judiciario",
"do",
"estado",
"do",
"rio",
"grande",
"do",
"norte",
"secretaria",
"unificada",
"da",
"comarca",
"areia",
"branca",
"br",
"110",
"km",
"01",
"areia",
"branca",
"rn",
"cep",
"59655",
"000",
"e",
"mail",
"abcsecuni",
"tjrn",
"jus",
"br",
"telefone",
"84",
"3673",
"9970",
"processo",
"no",
"0100698",
"07",
"2018",
"8",
"20",
"0113",
"ato",
"ordinatorio",
"com",
"fulcro",
"no",
"art",
"152",
"vi",
"do",
"cpc",
"intime",
"se",
"a",
"parte",
"apelada",
"por",
"intermedio",
"seu",
"advogado",
"para",
"apresentar",
"contrarrazoes",
"no",
"prazo",
"15",
"quinze",
"dias",
"art",
"1",
"010",
"1o",
"do",
"cpc",
"areia",
"branca",
"rn",
"27",
"fevereiro",
"2023",
"documento",
"assinado",
"eletronicamente",
"na",
"forma",
"da",
"lei",
"11",
"419",
"2006",
"wesley",
"costa",
"souza",
"dantas",
"chefe",
"secretaria",
"processo",
"0801449",
"83",
"2022",
"8",
"20",
"5133",
"sigla",
"tribunal",
"tjrn",
"orgao",
"vara",
"unica",
"da",
"comarca",
"tangara",
"data",
"disponibilizacao",
"28",
"02",
"2023",
"tipo",
"comunicacao",
"intimacao",
"classe",
"pedido",
"busca",
"e",
"apreensao",
"criminal",
"meio",
"diario",
"eletronico",
"justica",
"nacional",
"inteiro",
"teor",
"https",
"pje1g",
"tjrn",
"jus",
"br",
"443",
"pje",
"processo",
"consultadocumento",
"listview",
"seam",
"x",
"23022714224705600000090540621",
"envolvido",
"joao",
"paulo",
"martins",
"souza",
"barboza",
"polo",
"polo",
"passivo",
"advogado",
"joao",
"paulo",
"martins",
"souza",
"barboza",
"oab",
"0001304s",
"rn",
"conteudo",
"poder",
"judiciario",
"do",
"estado",
"do",
"rio",
"grande",
"do",
"norte",
"vara",
"unica",
"da",
"comarca",
"tangara",
"rua",
"assis",
"lopes",
"20",
"centro",
"tangara",
"rn",
"cep",
"59275",
"000",
"carta",
"intimacao",
"ao",
"a",
"ilmo",
"a",
"sr",
"a",
"joao",
"paulo",
"martins",
"souza",
"barboza",
"ordem",
"do",
"exmo",
"a",
"sr",
"a",
"dr",
"a",
"daniel",
"augusto",
"freire",
"lucena",
"e",
"couto",
"mauricio",
"mm",
"juiz",
"a",
"direito",
"desta",
"vara",
"na",
"forma",
"da",
"lei",
"etc",
"manda",
"pela",
"presente",
"extraida",
"dos",
"autos",
"do",
"processo",
"abaixo",
"especificado",
"intimar",
"vossa",
"senhoria",
"para",
"para",
"tomar",
"ciencia",
"do",
"id",
"95027891",
"processo",
"0801449",
"83",
"2022",
"8",
"20",
"5133",
"acao",
"pedido",
"busca",
"e",
"apreensao",
"criminal",
"309",
"requerente",
"delegacia",
"tangara",
"rn",
"mprn",
"promotoria",
"tangara",
"acusado",
"a",
"esclarecer",
"tangara",
"rn",
"27",
"fevereiro",
"2023",
"joao",
"sergio",
"ferreira",
"lima",
"chefe",
"secretaria",
"documento",
"assinado",
"digitalmente",
"na",
"forma",
"da",
"lei",
"n",
"\u00B0",
"11",
"419",
"06",
"vara",
"unica",
"da",
"comarca",
"tangara",
"processo",
"0801449",
"83",
"2022",
"8",
"20",
"5133",
"intimacao",
"despacho",
"vara",
"unica",
"da",
"comarca",
"tangara",
"processo",
"0801449",
"83",
"2022",
"8",
"20",
"5133",
"intimacao",
"despacho",
"destinatario",
"joao",
"paulo",
"martins",
"souza",
"barboza",
"destinatario",
"joao",
"paulo",
"martins",
"souza",
"barboza"
]
}
}
]
}
}
Looking at the given tokens for joao, paulo, martins ... shows that the de that is in the content field is absent in the tokens:
"sr",
"a",
"joao",
"paulo",
"martins",
"souza",
"barboza",
"ordem",
"do",
"exmo",
which corresponds to this section of the content.
Sr.(a). JOAO PAULO MARTINS DE SOUZA BARBOZA De ordem do Exmo(a).
It looks like "De" is removed during linguistics processing. Try to set the language of the document that is processed (https://docs.vespa.ai/en/linguistics.html#indexing-with-language) to see if that helps. The default Vespa linguistics implementation uses OpenNLP. More details in the linked document.
Hello,
We currently have the language set to Brazillian Portuguese in the language across the schema.
schema base_definition {
document base_definition {
field language type string {
indexing: "pt-BR" | set_language
}
field filtrado type bool {
indexing: summary | attribute
attribute {
fast-search
}
rank: filter
}
field updated_at type string {
indexing: summary
}
field timestamp type long {
indexing: summary
}
field origin_database type string {
indexing: summary | attribute
attribute {
fast-search
}
rank: filter
}
}
}
I have modified it to attempt auto-detection and the same problem of the missing de token remains, I then attempted to just not set language at all with the same results.
I have also specifically set language of the field content to auto-detect and with "pt-BR" | and then with "en" | just to be sure but de is still not present in either:
document diary_page inherits base_definition {
field id type long {
indexing: summary
}
field language_content type string {
indexing: set_language
}
field content type string {
indexing: index | summary
index: enable-bm25
summary: dynamic
stemming: none
}
}
Ok, then it sounds like a problem in OpenNLP. What happens if you create a document where content only contains "Sr.(a). JOAO PAULO MARTINS DE SOUZA BARBOZA De ordem do Exmo(a)."? Which tokens are indexed then?
I modified the content of data.json to only include the content and it indexed the de correctly.
{
"id": "toplevel",
"relevance": 1.0,
"fields": {
"totalCount": 1
},
"coverage": {
"coverage": 100,
"documents": 1,
"full": true,
"nodes": 1,
"results": 1,
"resultsFull": 1
},
"children": [
{
"id": "index:Vespa_content/0/c4ca423853b8799c572f2234",
"relevance": 0.28768207245178085,
"source": "Vespa_content",
"fields": {
"sddocname": "diary_page",
"content": "Sr.(a). <hi>JOAO</hi> <hi>PAULO</hi> <hi>MARTINS</hi> <hi>DE</hi> <hi>SOUZA</hi> <hi>BARBOZA</hi> De ordem do Exmo(a).",
"content_tokens": [
"sr",
"a",
"joao",
"paulo",
"martins",
"de",
"souza",
"barboza",
"de",
"ordem",
"do",
"exmo",
"a"
]
}
}
]
}
Found another instance of this bug in the following document (see put for id:diary_page:diary_page::2) of the following Vespa Feed file https://github.com/maxice8/vespa-bug-repro/blob/main/data.json.
The query using phrase("MATEUS", "DO", "VALE", "MENDES") matches and the highlight returns the absolute start of the file, the tokens show that the term "KELLY" is not tokenized in the expected location between vale and mendes (other instances of kelly are tokenized elsewhere, with its last token appearing in 433).
474 | "dos"
475 | "reis"
476 | "de"
477 | "melo"
478 | "matheus"
479 | "do"
480 | "vale"
481 | "mendes"
482 | "chaud"
483 | "mendes"
Which refers to this part of the file:
DOS REIS DE MELO KELLY MATHEUS DO VALE KELLY MENDES CHAUD KELLY MENDES
Here are all the tokens between the last kelly token, and the start of the bugged name.
433 | "kelly"
434 | "luiza"
435 | "masteguin"
436 | "andrade"
437 | "machado"
438 | "silva"
439 | "e"
440 | "silva"
441 | "madeira"
442 | "caldas"
443 | "magalhaes"
444 | "de"
445 | "sousa"
446 | "maisa"
447 | "do"
448 | "nascimento"
449 | "mara"
450 | "foltran"
451 | "ribeiro"
452 | "marciana"
453 | "o"
454 | "c"
455 | "teixeira"
456 | "maria"
457 | "coltro"
458 | "maria"
459 | "pereira"
460 | "medeiros"
461 | "souza"
462 | "mariana"
463 | "matos"
464 | "de"
465 | "mendonca"
466 | "marly"
467 | "da"
468 | "conceicao"
469 | "tavares"
470 | "marques"
471 | "de"
472 | "camargo"
473 | "marques"
474 | "dos"
475 | "reis"
476 | "de"
477 | "melo"
478 | "matheus"
Looking at a hex dump around the substring "Sr.(a). JOAO PAULO MARTINS DE SOUZA BARBOZA De ordem do Exmo(a)." when handing the annotated string field in the backend to make a memory index:
00003880 28 61 29 2e 20 53 72 2e 28 61 29 2e 20 4a 4f 41 |(a). Sr.(a). JOA|
00003890 4f 20 50 41 55 4c 4f 20 4d 41 52 54 49 4e 53 20 |O PAULO MARTINS |
000038a0 44 45 20 53 4f 55 5a 41 20 42 41 52 42 4f 5a 41 |DE SOUZA BARBOZA|
000038b0 20 44 65 20 6f 72 64 65 6d 20 64 6f 20 45 78 6d | De ordem do Exm|
000038c0 6f 28 61 29 2e 20 53 72 28 61 29 2e 20 44 72 28 |o(a). Sr(a). Dr(|
The annotated string field has a simple span list:
Span(14469, 2)
Span(14473, 1)
Span(14477, 4)
Span(14482, 5)
Span(14488, 7)
Span(14499, 5)
Span(14505, 7)
Span(14516, 5)
and annotations:
Annotation(AnnotationType(1, term)
sr
Span(14469, 2))
Annotation(AnnotationType(1, term)
Span(14473, 1))
Annotation(AnnotationType(1, term)
joao
Span(14477, 4))
Annotation(AnnotationType(1, term)
paulo
Span(14482, 5))
Annotation(AnnotationType(1, term)
martins
Span(14488, 7))
Annotation(AnnotationType(1, term)
souza
Span(14499, 5))
Annotation(AnnotationType(1, term)
barboza
Span(14505, 7))
Annotation(AnnotationType(1, term)
Span(14516, 5))
The word "DE" at byte offset 14496 and length 2 should have an annotation containing the string "de", but the annotation is not present, indicating that the word was likely dropped by the document processor that created the annotations.
The first document had 100 indexed occurrences of "de", while the second document had 100 indexed occurrences of "kelly" and 100 indexed occurrences of "2018".
This cutoff is based on maxtermoccurrences in the ilscripts config definition:
https://github.com/vespa-engine/vespa/blob/277980c99329301f4d6247a852a90305536367a6/configdefinitions/src/vespa/ilscripts.def#L4-L6
With 8.283.46 and the new match { max-occurrences: } setting bumped it now stores all the tokens that were skipped before.
@maxice8 that sounds good. We will also change the default of maxtermoccurrences before we merge the updated reference documentation (https://github.com/vespa-engine/documentation/pull/3049).
The default for max-occurrences is changed to 10000 in Vespa 8.308.26. Documentation: https://docs.vespa.ai/en/reference/schema-reference.html#max-occurrences.