天天看點

neo4j的小知識點

文章目錄

    • neo4j如何導入csv檔案
    • neo4j的查詢
    • Java查詢

neo4j如何導入csv檔案

以下示範的是帶檔案頭的csv檔案

1.把全部的csv檔案導入到機器的/import檔案夾内

2.執行導入語句可以不設定路徑

Windows在bin目錄的同級目錄import

Linux在/var/lib/neo4j/import

--導入節點
LOAD CSV WITH HEADERS FROM "file:///person.csv" AS line  CREATE(n:Person{id:line.personId,name:line.name})
                                                                         
--導入關系
--支援 toInt(),toFloat()函數
LOAD CSV WITH HEADERS FROM "file:///relation.csv" AS line
match (from{personId:line.targetId}),(to{personId:line.sourceId})
merge (from)-[r:關系{sourceId:line.sourceId,targetId:line.targetId,關系類型:line.關系類型,借債金額:toFloat(line.借債金額),借債時間:toInt(line.借債時間)}]->(to)


--給關系屬性加新資料
match ()-[r]-() set r.開始時間 = toInt('20180101')
           

neo4j還支援很多的函數,可以查詢官方的API

neo4j的查詢

--最短路徑查詢{路徑中不支援定義查詢次元}
MATCH (n),(m) ,p=allShortestPaths((n)-[*]-(m))  where id(n)=91 and id(m)=42  RETURN p
                    
--定義路徑查詢,存在即傳回值,否則不傳回
MATCH (n),(m) ,p=(n)-[r*..3]-(m)  where id(n)=91 and id(m)=42  RETURN p
                      
--關系篩選[以頂點xxxx開始,3度以内的全部關系滿足才會傳回資料]
MATCH p=(n)-[r*..3]-() where n.name = 'xxxx' 
and all( x in relationships(p) where x.xxx = xxx)
return p
           

以上的關系篩選,基本可以滿足屬性篩選過濾的需求,并且傳回值是無孤立點

Java查詢

public class CypherNeo4jOperation {
	private final static Logger logger = LoggerFactory.getLogger(CypherNeo4jOperation.class);

	// NEo4j driver properties
	private String URI;
	private String USER;
	private String PASSWORD;
	private Driver driver;
	private static Session session;
	private StatementResult result;

	private static volatile CypherNeo4jOperation instance = null;

	public static Session getSession() {
		return CypherNeo4jOperation.session;
	}

	public CypherNeo4jOperation() {
	}

	/**
	 * @param
	 * @return
	 */
	public CypherNeo4jOperation(String uri, String user, String password) {
		this.URI = uri.trim();
		this.USER = user.trim();
		this.PASSWORD = password.trim();
		this.driver = GraphDatabase.driver(URI, AuthTokens.basic(USER, PASSWORD));
		this.session = driver.session();
	}

	/**
	 * @param
	 * @return
	 */
	public synchronized static final CypherNeo4jOperation getInstance(String bolt, String username, String password) {

		if (instance == null) {
			// 加鎖
			synchronized (CypherNeo4jOperation.class) {
				// 這一次判斷也是必須的,不然會有并發問題
				if (instance == null) {
					instance = new CypherNeo4jOperation(bolt, username, password);
				}
			}
		}
		logger.info("Neo4j status " + instance.toString());
		return instance;
	}

	/**
	 * @param cypher neo4j查詢語句
	 * @return String
	 * @Description: (傳回查詢結束的結果)
	 */
	public String cypherJson(String cypher) {
		logger.info(cypher);
		StatementResult result = session.run(cypher); 
    }