이 페이지에서는 Spanner Graph에서 전체 텍스트 검색을 사용하는 방법을 설명합니다.
Spanner Graph는 그래프와 전체 텍스트 검색을 하나의 시스템에 결합합니다. 이 조합을 사용하면 그래프의 관계와 함께 비정형 데이터에서 유용한 정보를 도출할 수 있습니다.
시작하기 전에
이 페이지의 예시를 실행하려면 Google Cloud 콘솔을 사용하여 Spanner Graph 설정 및 쿼리 절차를 실행해야 합니다. 이 절차는 다음을 실행합니다.
토큰 및 검색 색인 만들기
전체 텍스트 검색을 사용하기 위한 첫 번째 단계는 검색할 콘텐츠를 토큰화하고 검색 색인을 만드는 것입니다. 전체 텍스트 검색은 검색 색인에 대해 쿼리를 실행합니다.
다음 예에서는 nick_name_token
열을 추가하고 TOKENIZE_FULLTEXT 함수를 사용하여 Account.nick_name
열의 텍스트를 토큰화합니다. 그런 다음 nick_name_token
열에 검색 색인이 생성됩니다.
ALTER TABLE Account
ADD COLUMN nick_name_token TOKENLIST
AS (TOKENIZE_FULLTEXT(nick_name)) STORED HIDDEN;
CREATE SEARCH INDEX AccountTextSearchIndex
ON Account(nick_name_token) STORING (nick_name);
다음 예에서는 TOKENIZE_FULLTEXT 함수를 사용하여 Account.nick_name
의 텍스트를 토큰화하고 토큰이 포함된 nick_name_token
열에 검색 색인을 만듭니다.
ALTER TABLE AccountTransferAccount
ADD COLUMN notes STRING(MAX);
ALTER TABLE AccountTransferAccount
ADD COLUMN notes_token TOKENLIST AS (TOKENIZE_FULLTEXT(notes)) STORED HIDDEN;
CREATE SEARCH INDEX TransferTextSearchIndex
ON AccountTransferAccount(notes_token) STORING (notes);
일부 새 열이 Account
및 AccountTransferAccount
에 추가되었으며 검색 함수에서 새 그래프 속성으로 액세스하므로 다음 문을 사용하여 속성 그래프 정의를 업데이트해야 합니다 (기존 노드 또는 가장자리 정의 업데이트에서 자세히 설명).
CREATE OR REPLACE PROPERTY GRAPH FinGraph
NODE TABLES (Account, Person)
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
LABEL Owns,
AccountTransferAccount
SOURCE KEY (id) REFERENCES Account (id)
DESTINATION KEY (to_id) REFERENCES Account (id)
LABEL Transfers
);
이제 그래프 데이터에서 전체 텍스트 검색을 사용할 수 있습니다.
검색 그래프 노드 속성
이 예에서는 그래프에서 노드를 검색하고 노드 간의 관계를 탐색하는 방법을 보여줍니다.
일부 텍스트 메시지로
Account.nick_name
를 업데이트합니다.UPDATE Account SET nick_name = "Fund for vacation at the north pole" WHERE id = 7; UPDATE Account SET nick_name = "Fund -- thrill rides!" WHERE id = 16; UPDATE Account SET nick_name = "Rainy day fund for the things I still want to do" WHERE id = 20;
SEARCH
함수를 사용하여 그래프에서nick_name
에 'rainy day' 또는 'vacation'이 포함된Account
노드를 찾습니다. 그래프 탐색을 사용하여 해당 계정으로 송금된 금액을 찾습니다. 검색 관련성을 기준으로 일치 항목에 점수를 매깁니다. 관련성 내림차순으로 결과를 정렬하고 반환합니다. 동일한 검색 함수 호출에서 토큰의 불연결을 찾을 수 있습니다.GRAPH FinGraph MATCH (n:Account)<-[e:Transfers]-(:Account) WHERE SEARCH(n.nick_name_token, '"rainy day" | vacation') RETURN n.nick_name, e.amount AS amount_added ORDER BY SCORE(n.nick_name_token, '"rainy day" | vacation') DESC
결과:
nick_name amount_added Rainy day fund for the things I still want to do 300 Fund for vacation at the north pole 500
검색 그래프 에지 속성
이 예에서는 그래프에서 특정 간선을 검색하는 방법을 보여줍니다.
AccountTransferAccount.notes
를 문자 메시지로 업데이트합니다.UPDATE AccountTransferAccount SET notes = 'for trip fund' WHERE id = 16 AND to_id = 20; UPDATE AccountTransferAccount SET notes = '<trip's very fun!>' WHERE id = 20 AND to_id = 7; UPDATE AccountTransferAccount SET notes = 'book fee' WHERE id = 20 AND to_id = 16;
전체 텍스트 검색을 사용하여 'trip'이 포함된 Transfers(이전) 에지를 찾습니다. 그래프 탐색을 사용하여 이러한 전송의 소스 및 대상 노드를 찾습니다.
GRAPH FinGraph MATCH (a:Account)-[e:Transfers WHERE SEARCH(e.notes_token, 'trip')]->(b:Account) RETURN a.id AS src_id, b.id AS dst_id, e.notes
결과:
src_id dst_id notes 20 7 <trip's very fun!> 16 20 for trip fund
검색 함수는 텍스트에 HTML 태그가 있음에도 불구하고 첫 번째 결과를 올바르게 가져왔습니다.