AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

Perguntas[neo4j](coding)

Martin Hope
Bahar
Asked: 2024-11-07 03:23:46 +0800 CST

Como adicionar uma lista como um valor de atributo ao usar o analisador rdflib do Neo4j

  • 5

Suponha que eu tenha um arquivo RDF .ttl que inclui:

<https://example/Product_1> <http://www.w3.org/ns/dcat#keyword> "health".
<https://example/Product_1> <http://www.w3.org/ns/dcat#keyword> "fitness".
<https://example/Product_1> <http://www.w3.org/ns/dcat#keyword> "sports".

Notei que se eu usar o rdflib para importar esses dados para o Neo4j, usando o código descrito aqui , as coisas funcionam, mas apenas um dos valores para a palavra-chave está sendo importado para meu produto. O que faz sentido porque para a "chave" keywordsó podemos ter um valor. Então, há uma maneira de fazer o parser analisar meu arquivo .ttl de forma que ele crie algo como:

(n:Product {Keyword:["sports","fitness", "health"]})

neo4j
  • 1 respostas
  • 15 Views
Martin Hope
it_would_be_better
Asked: 2024-11-02 00:38:31 +0800 CST

Tempo de execução variável para a mesma consulta no Neo4j

  • 5

Estou executando a mesma consulta no Neo4j e notando que o tempo de execução varia significativamente. Por exemplo, a consulta pode ser executada em 5-6 segundos, enquanto em outro momento leva 2-3 minutos, mesmo que os dados permaneçam inalterados.

:param {
  idsToExclude: []
};

:auto LOAD CSV WITH HEADERS FROM ('file:///PERSON_DATA.csv') AS row
WITH row
WHERE NOT row.`person_id` IN $idsToExclude AND NOT row.`person_id` IS NULL
CALL {
  WITH row
  MERGE (n: `Person` { `person_id`: row.`person_id` })
  SET n.`person_id` = row.`person_id`
  SET n.`name` = row.`name`
  SET n.`age` = toInteger(row.`age`)
  SET n.`email` = row.`email`
  SET n.`address` = row.`address`
  SET n.`creation_date` = datetime(row.`creation_date`)
  SET n.`last_modified_date` = datetime(row.`last_modified_date`)
} IN TRANSACTIONS OF 5000 ROWS;

aqui estão alguns dados do meu arquivo de configuração que foram descomentários, se necessário

server.memory.heap.initial_size=8G
server.memory.heap.max_size=16G
dbms.memory.transaction.total.max=32G

EXPLIQUE minha consulta

Primeira parte Segunda parte Segunda parte

Por que a execução da mesma consulta no Neo4j pode levar quantidades de tempo diferentes? Quais fatores podem influenciar isso e como posso otimizar seu desempenho?

neo4j
  • 1 respostas
  • 26 Views
Martin Hope
lkp
Asked: 2024-10-11 13:13:49 +0800 CST

Uma maneira eficiente de obter uma lista de nós junto com o nó relacionado mais recente?

  • 5

Tenho o seguinte relacionamento:

(Thread)-[:HAS_MESSAGE]->(Message)

Um tópico pode ter de dezenas a milhares de mensagens.

Aqui está minha consulta para encontrar uma lista de tópicos e também retornar a mensagem mais recente de cada um, se existir.

MATCH (t:Thread)
OPTIONAL MATCH (t)-[:HAS_MESSAGE]->(m:Message)
WITH t, m
ORDER BY m.createdAt DESC
WITH t, COLLECT(m)[0] AS latestMessage
RETURN t, latestMessage

Estou com dificuldade para entender se há uma maneira de reescrever isso para evitar COLLECT(m)[0]e, de alguma forma, usar apenas a mensagem mais recente?

neo4j
  • 2 respostas
  • 26 Views
Martin Hope
ning wu
Asked: 2024-09-27 10:16:35 +0800 CST

A versão neo4j 3.5 apoc.create.vRelationship não retorna atributos de borda

  • 7

Aqui está minha declaração Cypher:

match (first1:ent) where first1.nodeid in ['aab40c4d65d5c0a428ed84dc0109b0c4']
match (first2:ent) where first2.nodeid in ['000415fee2b0272cdcc2439f521b2e2e']
CALL apoc.create.vRelationship(first1,'teninvmerge',{conprop:'11'},first2) YIELD rel 
RETURN rel,rel.conprop

insira a descrição da imagem aqui

Como obtenho as propriedades da aresta virtual que defino diretamente?

Não sei se o problema é porque minha declaração está escrita em um problema, ou se a versão 3.5 do APOC não suporta consulta direta de atributos de aresta. Verifiquei a documentação oficial e não encontrei nenhuma informação relevante.

neo4j
  • 2 respostas
  • 29 Views
Martin Hope
notANerdDev
Asked: 2024-09-22 14:05:50 +0800 CST

Neo4J APOC Periodic Iterate - ReferenceFromSlot(2) para ser um mapa, mas era :`NO_VALUE`": 4

  • 5

Tenho nós do rótulo TypeA que têm uma propriedade de string, propA. propA é uma string JSON e pode ser convertida em um mapa usando apoc.convert.fromJsonMap().

Quero criar novos nós do Tipo B, cujas propriedades são propA e criar um relacionamento entre ambos os nós. Executei a seguinte consulta com sucesso:

MATCH (n:TypeA)
WITH apoc.convert.fromJsonMap(n.propA) AS values,n limit 1
MERGE (v:TypeB)
SET v=values
WITH n,v
MERGE (v)-[:RELATION_TYPE]->(n)
RETURN v,n;

No entanto, quando uso o seguinte com apoc.periodic.iterate para converter meu banco de dados inteiro, ele lança um erro. A consulta que estou executando:

CALL apoc.periodic.iterate(
  "MATCH (n:TypeA) RETURN n;",
  "WITH apoc.convert.fromJsonMap(n.propA) AS values, n
   MERGE (v:TypeB)
   SET v=values
   WITH n,v
   MERGE (v)-[:RELATION_TYPE]->(n)
   RETURN v,n;
  ",
  {batchSize:10000, parallel: false});

O erro:

{
  "Expected ReferenceFromSlot(2) to be a map, but it was :`NO_VALUE`": 4382
}

Qualquer ajuda é muito apreciada.

neo4j
  • 1 respostas
  • 31 Views
Martin Hope
Dev Scott
Asked: 2024-08-09 12:23:19 +0800 CST

Neo4j obtendo atualizações resumidas falsas para duas atualizações no mesmo campo que nulo

  • 6

Estou seguindo a consulta neo4j

match (u:users {id: $id) set u.isOnline = null

Ele fornece um resumo da atualização para o valor definido de propriedades como 1 pela primeira vez e quando executo novamente a consulta, ele fornece 0 para o mesmo valor.

Mas quando eu executo esta consulta

match (u:users {id:$id}) set u.token = $token

Sempre me dá o resumo da atualização para o valor do conjunto de propriedades é 1, independentemente de quantas vezes eu executei esta consulta

neo4j
  • 1 respostas
  • 12 Views
Martin Hope
zakmck
Asked: 2024-06-10 23:52:24 +0800 CST

Pesquisa eficiente de relacionamentos Neo4j por valor de propriedade

  • 5

No Neo4j, preciso encontrar todos os relacionamentos com um determinado valor de propriedade, independentemente do tipo de relacionamento:

WITH ["1651365", "1188654", "1151147", ...] AS relIds
MATCH ()-[r]->() WHERE r.myId IN relIds
RETURN TYPE(r) AS type, properties ( r ) AS props;

Esta consulta funciona, mas é muito lenta. Se eu criar um perfil, vejo que é baseado em uma varredura completa (de 14 milhões de relacionamentos).

O problema é que não há como definir um índice para todos os tipos de relacionamento (posso fazer o mesmo com uma lista de tipos e o mecanismo usará índices definidos para myId).

Há uma solução? Ao usar o elementId(), o mecanismo faz uma operação de busca e é muito rápido, mas a documentação desencoraja (dizem que os IDs internos são reutilizados após a exclusão).

neo4j
  • 2 respostas
  • 33 Views
Martin Hope
Michael Thrift
Asked: 2024-06-05 21:55:39 +0800 CST

Neo4j - Adicionando um grande número de relacionamentos - Desempenho

  • 5

A configuração

Eu tenho um aplicativo .NET que usa a biblioteca cliente Neo4j para realizar operações CRUD em um banco de dados backend Neo4j. Os nós e relacionamentos neste banco de dados representam fórmulas e parâmetros.

Existem dois rótulos de nó: BusinessRulee ChartField.

Para cada BusinessRulenó, haverá um único OUTPUTSrelacionamento com um ChartFieldnó e poderá haver 1 para muitos USESrelacionamentos com outros ChartFieldnós que representam os parâmetros da BusinessRulefórmula.

Quando um usuário termina de configurar todas as suas regras, ele publica suas alterações, o que reconstruirá o gráfico.

O problema

Estou lutando com o desempenho de adicionar os relacionamentos no gráfico.

Em uma única "publicação", posso ter 3.000 BusinessRules distintos. A adição de todos os nós BusinessRulee ChartFieldocorre rapidamente e o desempenho não é um problema.

Mas adicionar as relações para cada um dos 3.000 BusinessRules está demorando muito.

Abaixo está um exemplo da consulta Cypher que adicionaria os relacionamentos para um único arquivo BusinessRule. Ele tem que ser executado 3.000 vezes para completar a tarefa. Eu tenho um índice na Idpropriedade para ambos os tipos de nó.

MATCH (p1:BusinessRule {Id: '2025-BUDGET-10000184-11061345'})  
MATCH (t1:ChartField {Id: '2025-BUDGET-11061345'})  
MATCH (v1:ChartField {Id: '2025-BUDGET-11061472'})  
MATCH (v2:ChartField {Id: '2025-BUDGET-11062722'})  
CREATE (p1)-[:OUTPUTS {Type: 'OUTPUTS', TargetCFID: 11061345, BusinessRuleId: '2025-BUDGET-10000184-11061345'}]->(t1)  
CREATE (p1)-[:USES {Type: 'USES', ParamCFID: 11061472, BusinessRuleId: '2025-BUDGET-10000184-11061345'}]->(v1)  
CREATE (p1)-[:USES {Type: 'USES', ParamCFID: 11062722, BusinessRuleId: '2025-BUDGET-10000184-11061345'}]->(v2)

Esta consulta funciona combinando os nós relevantes BusinessRulee ChartFieldonde p1 é o nó de destino BusinessRule, t1 é o ChartFieldnó de destino e v* são os ChartFieldparâmetros. Então, com eles, podemos adicionar os relacionamentos.

Alguém tem alguma sugestão sobre como acelerar esse processo? Demorou quase 22 minutos para executar esta cifra (3.000) vezes.

Considerei agrupar em lote até 100 dessas consultas cifradas para economizar nas idas e vindas, mas isso fica um pouco complexo, pois os nomes de alias devem ser todos exclusivos.

Em alguns testes em lote, vi algumas melhorias, mas nada significativo.

neo4j
  • 1 respostas
  • 26 Views
Martin Hope
Sam Wynne
Asked: 2024-05-05 03:03:12 +0800 CST

Neo4j Cypher: Como parar de verificar várias cláusulas OPTIONAL MATCH se uma correspondência for encontrada?

  • 6

Estou tentando verificar se existe alguma combinação de relacionamentos, mas só me importo se houver pelo menos um. Como as travessias aumentam em complexidade, seria ideal se eu pudesse quebrar e retornar a consulta na primeira correspondência.

Exemplo:

MATCH (p:Person { id: "user_1" }), (m:Movie { id: "movie_x" })
OPTIONAL MATCH (p)-[acted:ACTED_IN]->(m)
OPTIONAL MATCH (p)-[directed:DIRECTED]->(m)
OPTIONAL MATCH (p)-[:ACTED_IN]->(:Movie)<-[:PRODUCED_BY]-(:Studio)-[sibling_actor:PRODUCED_BY]->(m)
OPTIONAL MATCH (p)-[:DIRECTED]->(:Movie)-[:OF_TYPE]->(:Genre)<-[sibling_director:OF_TYPE]-(m)
RETURN count(acted) > 0 AS actedInMovie, count(directed) > 0 AS directedMovie, count(sibling_actor) > 0 AS actedInSibling, count(sibling_director) > 0 AS directedSibling

Isso retornará a veracidade da existência de CADA um desses padrões, mas como só me importo se UM corresponder, adoraria não executar todas as quatro correspondências opcionais se a primeira encontrar uma correspondência.

neo4j
  • 1 respostas
  • 20 Views
Martin Hope
bAN
Asked: 2024-04-11 21:36:38 +0800 CST

Use a função apoc em uma instrução WITH

  • 5

Gostaria de usar uma função apoc com uma WITHinstrução, mas sempre recebo um erro. Quando chamamos a função diretamente em uma CALLinstrução, isso está funcionando:

CALL apoc.ml.openai.embedding(['Some Text'], ...

Mas quando incluo a chamada de função em uma WITHinstrução

MATCH (movie:Movie) WHERE movie.tagline IS NOT NULL
WITH movie, apoc.ml.openai.embedding(movie.tagline, 

Eu tenho um erro de função desconhecida:message: Unknown function 'apoc.ml.openai.embedding'

qualquer ideia?

neo4j
  • 1 respostas
  • 10 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve