Запрос Cypher возвращает результаты в среде браузера, но когда тот же код шифра используется в функции py2neo, ничего не возвращается - PullRequest
0 голосов
/ 25 декабря 2018

Краткое описание проблемы

Я попытался воссоздать свои функции и графики в neo4j / py2neo, используя те же файлы CSV, но без уникальных идентификаторов в файлах CSV.

Однако, когда я пытаюсь вызвать функцию, которую я написал в py2neo, чтобы вернуть рекомендованные ключевые слова, функция возвращает пустой список.Тот же самый зашифрованный запрос, который использует py2neo, дает мне правильные рекомендации, когда я помещаю его в браузер.

//Jaccard Similarity keyword recommendation  

MATCH (search_query:Title)-[:HAS_KEYWORDS]->(k:Keyword)  
WITH {item:id(search_query), categories: collect(id(k))} as userData  
WITH collect(userData) as data  
CALL algo.similarity.jaccard(data, {topK: 1, similarityCutoff: 0.1, write:true})  
YIELD nodes, similarityPairs, write, writeRelationshipType, writeProperty, min, max, mean, stdDev, p25, p50, p75, p90, p95, p99, p999, p100  
RETURN nodes, similarityPairs, write, writeRelationshipType, writeProperty, min, max, mean, p95  

//Return similar keywords 

MATCH (p:Title)-[:SIMILAR]->(other),  
  (other)-[:HAS_KEYWORDS]->(keyword)    
WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.title contains "aaa"  
RETURN keyword AS keywords  

Я получаю ожидаемые результаты с этим шифровальным кодом при вводе его в браузер, но я заметил, чтопоявляется предупреждение, когда я помещаю запрос шифра, который ищет [: SIMILAR]:

Индекс не может эффективно выполнить подстановочный запрос

Если выполнение этого оператора с использованием CONTAINS не делает 'Чтобы оправдать ваши ожидания, ознакомьтесь с альтернативными поставщиками индекса, см. документацию по настройке индекса.(индекс: индекс на: Заголовок (заголовок))

Моя функция py2neo:

def jacc_kw_rec(search):  
    q_r = []  
    query2 = "MATCH (p:Title)-[:SIMILAR]->(other), (other)-[:HAS_KEYWORDS]->(keyword) WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.Title contains \"{}\"".format(search)+ " RETURN keyword AS keywords LIMIT 3"  

    result = graph.run(query2).data()

    for r in result:
        r_j = json.dumps(r)
        loaded_r = json.loads(r_j)
        kw_ex = loaded_r['keywords']['Keyword']
        q_r.append(kw_ex)
    return q_r

Когда я проверял старый код, функциявернуть список рекомендуемых ключевых слов, таких как ['aaa', 'bbb', 'ccc']

Обновление: после тестирования моей функции на моем старом коде он по-прежнему возвращается с пустым списком.graph.run (query2) .data () пуст.

Я хотел бы знать:

  1. Почему мой graph.run (query2) .data ничего не возвращает, пока в браузере есть результаты.

Большое спасибо,

Эрик

1 Ответ

0 голосов
/ 26 декабря 2018

... Закончилось тем, что это опечатка, которую я не смог найти, потому что neo4j подумал, что это пустая спичка.

Из-за

kw_ex = loaded_r['keywords']['Keyword']

После изменения на:

kw_ex = loaded_r['keyword']['Keyword']

он снова начал работать.

Я до сих пор не понимаю, почему курсор появляется ни с чем, хотя на самом деле он что-то обнаружил, но только что обнаружил ошибку, которую не удалось устранить.

...