티스토리 뷰

Neo4j

FUll-text search

joyHong 2020. 6. 17. 14:13

Neo4j에서는 Apache Lucene 를 활용하여 full-text 인덱싱과 검색을 제공하고 있다.

노드와 관계에 대하여 색인이 가능하고 Lucene이 제공하는 애널라이저(analyzer)들과 커스텀 애널라이저를 사용할 수 있다.

인덱싱된 문자열 값을 토큰화하여 처리하는데 이는 애널라이저에 따라 결정이 된다.

복합 인덱스와의 차이점은 복합 인덱스는 labelproperty 모두에서 매치된 대상을 색인하지만
full-text
인덱스는 대상이 label이나 관계에 존재하는 property 중 하나라도 있으면 색인을 한다.

 

애널라이저 목록 보기

CALL db.index.fulltext.listAvailableAnalyzers 

 

위의 쿼리를 실행하면 다양한 애널라이저를 확인할 수 있다.

 

여기에서는 full-text index를 사용하기 위해 샘플데이터를 import하고, 인덱스 생성 및 검색을 해보도록 하겠다.

샘플데이터는

https://joyhong.tistory.com/89

 

N_14. CONSTRUCT 를 이용한 RDF 파일 생성

SPARQL 질의문에는 SELECT 이외에도 ASK, DESCRIBE, CONSTRUCT 구문이 있다. 지난 포스팅에서 엑셀 데이터를 스프레드시트 온톨로지로 임포트하는 방법에 대해 소개하였다. https://joyhong.tistory.com/88 N_13...

joyhong.tistory.com

에서 생성한 파일을 샘플데이터로 사용하겠다.

library.ttl
1.30MB

 

 

 

RDF 형식의 데이터이기 때문에 이전에 포스팅한 내용을 참고하여 Neosemantics 플러그인과 GraphConfig 설정, 제약사항 생성을 실행해야 한다.

 

RDF를 Neo4j에 import 하는 방법은 https://joyhong.tistory.com/125

 

Import RDF

RDF 형식의 데이터를 Neo4j에 import하기 위해서는 먼저 플러그인을 설치해야 한다. https://joyhong.tistory.com/122 Neosemantics Neosemantics 는 Neo4j에서 RDF를 사용할 수 있게 해주는 플러그인이다. https:..

joyhong.tistory.com

을 참고하면 된다.

 

1. RDFNeo4jimport

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를 사용하였다.

labelproperty에 대한 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를 지정해야 하며, paramsoptional이다.

형식은 아래와 같다.

CALL db.index.fulltext.createRelationshipIndex("인덱스명", ["type"], ["property"],{params}) 

 

생성된 인덱스를 삭제하기 위해서는 아래와 같이 실행하면 삭제가 된다.

CALL db.index.fulltext.drop("titles")

 


참조:

https://neo4j.com/developer/kb/fulltext-search-in-neo4j/

'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
«   2024/05   »
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 31
글 보관함