Module: IndexUtil::FragmentsFts

Defined in:
lib/index_util/fragments_fts.rb

Class Method Summary collapse

Class Method Details

.delete(db, fragment) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/index_util/fragments_fts.rb', line 16

def delete(db, fragment)
  db[
    "INSERT INTO fragments_fts(fragments_fts, rowid, fragment_document, content) VALUES ('delete', ?, ?, ?)",
    fragment.fetch(:id),
    fragment.fetch(:fragment_document),
    fragment.fetch(:content)
  ].insert
end

.insert(db, fragment) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/index_util/fragments_fts.rb', line 7

def insert(db, fragment)
  db[
    "INSERT INTO fragments_fts(rowid, fragment_document, content) VALUES (?, ?, ?)",
    fragment.fetch(:id),
    fragment.fetch(:fragment_document),
    fragment.fetch(:content)
  ].insert
end

.search(db, query, limit:) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/index_util/fragments_fts.rb', line 25

def search(db, query, limit:)
  db.fetch(<<~SQL, query.to_s, Integer(limit)).all
    SELECT fragments.id, fragments.fragment_document, fragments.content, bm25(fragments_fts) AS score
    FROM fragments_fts
    JOIN fragments ON fragments.id = fragments_fts.rowid
    WHERE fragments_fts MATCH ?
    ORDER BY score
    LIMIT ?
  SQL
rescue Sequel::DatabaseError
  []
end