Menggunakan penelusuran teks lengkap dengan Spanner Graph

Halaman ini menjelaskan cara menggunakan penelusuran teks lengkap di Spanner Graph.

Spanner Graph menggabungkan penelusuran grafik dan teks lengkap dalam satu sistem. Kombinasi ini memungkinkan Anda memperoleh insight dari data tidak terstruktur bersama dengan hubungan dalam grafik.

Sebelum memulai

Untuk menjalankan contoh di halaman ini, Anda perlu melakukan prosedur menyiapkan dan membuat kueri Spanner Graph menggunakan konsol Google Cloud. Prosedur ini melakukan hal berikut:

  1. Buat instance.
  2. Buat database.
  3. Buat skema untuk database Spanner Graph Anda.
  4. Sisipkan data grafik.

Membuat token dan indeks penelusuran

Langkah pertama untuk menggunakan penelusuran teks lengkap adalah membuat token konten yang ingin Anda telusuri dan membuat indeks penelusuran. Penelusuran teks lengkap menjalankan kueri terhadap indeks penelusuran.

Contoh berikut menambahkan kolom nick_name_token dan menggunakan fungsi TOKENIZE_FULLTEXT untuk membuat token teks di kolom Account.nick_name. Selanjutnya, indeks penelusuran dibuat di kolom 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);

Contoh berikut menggunakan fungsi TOKENIZE_FULLTEXT untuk membuat token teks di Account.nick_name dan membuat indeks penelusuran di kolom nick_name_token yang berisi 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);

Karena beberapa kolom baru telah ditambahkan ke Account dan AccountTransferAccount dan Anda mengaksesnya sebagai properti grafik baru dalam fungsi penelusuran, Anda perlu memperbarui definisi grafik properti menggunakan pernyataan berikut (lebih dijelaskan dalam memperbarui definisi node atau tepi yang ada).

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
  );

Anda kini dapat menggunakan penelusuran teks lengkap pada data grafik.

Properti node grafik penelusuran

Contoh ini menunjukkan cara menelusuri node dalam grafik dan mempelajari hubungannya.

  1. Perbarui Account.nick_name dengan beberapa pesan teks.

    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;
    
  2. Gunakan fungsi SEARCH untuk menemukan node Account dalam grafik yang memiliki "rainy day" ATAU "vacation" di nick_name-nya. Gunakan traversal grafik untuk menemukan jumlah uang yang ditransfer ke Akun tersebut. Beri skor kecocokan berdasarkan relevansi penelusuran. Urutkan dan tampilkan hasil dalam urutan relevansi menurun. Perhatikan bahwa Anda dapat mencari disjungsi token dalam panggilan fungsi penelusuran yang sama.

    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
    

    Hasil:

    nick_name                                             amount_added
    Rainy day fund for the things I still want to do      300
    Fund for vacation at the north pole                   500
    

Properti tepi grafik penelusuran

Contoh ini menunjukkan cara menelusuri tepi tertentu dalam grafik

  1. Perbarui AccountTransferAccount.notes dengan pesan teks.

    UPDATE AccountTransferAccount SET notes = 'for trip fund'
    WHERE id = 16 AND to_id = 20;
    UPDATE AccountTransferAccount SET notes = '&lt;trip&#39;s very fun!&gt;'
    WHERE id = 20 AND to_id = 7;
    UPDATE AccountTransferAccount SET notes = 'book fee'
    WHERE id = 20 AND to_id = 16;
    
  2. Gunakan penelusuran teks lengkap untuk menemukan tepi Transfer yang berisi "trip". Gunakan penelusuran grafik untuk menemukan node sumber dan tujuan transfer tersebut.

    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
    

    Hasil:

    src_id  dst_id  notes
    
    20      7      &lt;trip&#39;s very fun!&gt;
    16      20     for trip fund
    

Fungsi penelusuran mengingat hasil pertama dengan benar meskipun ada tag HTML dalam teks.

Langkah selanjutnya