티스토리 뷰
Neo4j에서는 Apache Lucene 를 활용하여 full-text 인덱싱과 검색을 제공하고 있다.
노드와 관계에 대하여 색인이 가능하고 Lucene이 제공하는 애널라이저(analyzer)들과 커스텀 애널라이저를 사용할 수 있다.
인덱싱된 문자열 값을 토큰화하여 처리하는데 이는 애널라이저에 따라 결정이 된다.
복합 인덱스와의 차이점은 복합 인덱스는 label과 property 모두에서 매치된 대상을 색인하지만
full-text 인덱스는 대상이 label이나 관계에 존재하는 property 중 하나라도 있으면 색인을 한다.
애널라이저 목록 보기
CALL db.index.fulltext.listAvailableAnalyzers
위의 쿼리를 실행하면 다양한 애널라이저를 확인할 수 있다.
여기에서는 full-text index를 사용하기 위해 샘플데이터를 import하고, 인덱스 생성 및 검색을 해보도록 하겠다.
샘플데이터는
https://joyhong.tistory.com/89
에서 생성한 파일을 샘플데이터로 사용하겠다.
RDF 형식의 데이터이기 때문에 이전에 포스팅한 내용을 참고하여 Neosemantics 플러그인과 GraphConfig 설정, 제약사항 생성을 실행해야 한다.
RDF를 Neo4j에 import 하는 방법은 https://joyhong.tistory.com/125
을 참고하면 된다.
1. RDF를 Neo4j에 import
CALL n10s.rdf.import.fetch("file:///D:/data/library.ttl","Turtle")
2. 노드에 대한 색인 생성
CALL db.index.fulltext.createNodeIndex("titles",["Resource"],["rdfs__label"],{ analyzer: "cjk"})
예시에서는 인덱스명을 "titles"로 지정하였고, 대상 노드의 레이블명은 "Resource", 대상 노드의 property는 "rdfs__label", 그리고 애널라이저는 한글 문자열을 색인하기 위해 cjk를 사용하였다.
label과 property에 대한 params은 한가지씩만 사용하였으나 list 형태이기 때문에 여러 개의 label 과 property를 사용할 수 있다.
ex) createNodeIndex("titles",["Resource", "Person"],["rdfs__label", "profile"])
색인이 완료되었으면 검색을 실행해보도록 한다.
CALL db.index.fulltext.queryNodes("titles", "별빛") YIELD node, score
RETURN node, node.rdfs__label, score
queryNodes("인덱스명", "검색어") 형태로 사용하면 된다.
Lucene 기반이기 때문에 검색어는 루씬의 검색식을 사용할 수도 있다.
CALL db.index.fulltext.queryNodes("titles", "별빛 AND 작은") YIELD node, score
RETURN node, node.rdfs__label, score
full-text search는 관계에 대한 색인도 가능하다.
관계 타입명과 관계의 property를 지정해야 하며, params는 optional이다.
형식은 아래와 같다.
CALL db.index.fulltext.createRelationshipIndex("인덱스명", ["type"], ["property"],{params})
생성된 인덱스를 삭제하기 위해서는 아래와 같이 실행하면 삭제가 된다.
CALL db.index.fulltext.drop("titles")
참조:
'Neo4j' 카테고리의 다른 글
Neo4J 활용 (0) | 2020.08.29 |
---|---|
Import RDF (0) | 2020.06.17 |
RDF 데이터가 Neo4j에 저장되는 방식 (0) | 2020.06.17 |
그래프 구성 설정 (0) | 2020.06.17 |
Neosemantics (0) | 2020.06.17 |
- Total
- Today
- Yesterday
- 트리플 변환
- Linked Data
- rdfox
- stardog
- 지식 그래프
- networkx
- 온톨로지
- 사이퍼
- 지식그래프
- Neo4j
- 타임리프
- TBC
- RDF 변환
- LOD
- RDF
- pyvis
- TDB
- Knowledge Graph
- TopBraid Composer
- 트리플
- Ontology
- neosemantics
- cypher
- 장고
- Thymeleaf
- 스프링부트
- django
- property graph
- 그래프 데이터베이스
- sparql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |