mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 01:14:31 +02:00
table.search_sql(include_rank=True) option (#480)
* search_sql add include_rank option * add test * add FTS4 test * Apply Black Thanks, @chapmanjacobd
This commit is contained in:
parent
087753cd42
commit
ecf1d40112
2 changed files with 48 additions and 0 deletions
|
|
@ -2376,6 +2376,7 @@ class Table(Queryable):
|
|||
limit: Optional[int] = None,
|
||||
offset: Optional[int] = None,
|
||||
where: Optional[str] = None,
|
||||
include_rank: bool = False,
|
||||
) -> str:
|
||||
""" "
|
||||
Return SQL string that can be used to execute searches against this table.
|
||||
|
|
@ -2385,6 +2386,7 @@ class Table(Queryable):
|
|||
:param limit: SQL limit
|
||||
:param offset: SQL offset
|
||||
:param where: Extra SQL fragment for the WHERE clause
|
||||
:param include_rank: Select the search rank column in the final query
|
||||
"""
|
||||
# Pick names for table and rank column that don't clash
|
||||
original = "original_" if self.name == "original" else "original"
|
||||
|
|
@ -2427,6 +2429,8 @@ class Table(Queryable):
|
|||
rank_implementation = "rank_bm25(matchinfo([{}], 'pcnalx'))".format(
|
||||
fts_table
|
||||
)
|
||||
if include_rank:
|
||||
columns_with_prefix_sql += ",\n " + rank_implementation + " rank"
|
||||
limit_offset = ""
|
||||
if limit is not None:
|
||||
limit_offset += " limit {}".format(limit)
|
||||
|
|
|
|||
|
|
@ -556,6 +556,50 @@ def test_enable_fts_error_message_on_views():
|
|||
" rank_bm25(matchinfo([books_fts], 'pcnalx'))"
|
||||
),
|
||||
),
|
||||
(
|
||||
{"include_rank": True},
|
||||
"FTS5",
|
||||
(
|
||||
"with original as (\n"
|
||||
" select\n"
|
||||
" rowid,\n"
|
||||
" *\n"
|
||||
" from [books]\n"
|
||||
")\n"
|
||||
"select\n"
|
||||
" [original].*,\n"
|
||||
" [books_fts].rank rank\n"
|
||||
"from\n"
|
||||
" [original]\n"
|
||||
" join [books_fts] on [original].rowid = [books_fts].rowid\n"
|
||||
"where\n"
|
||||
" [books_fts] match :query\n"
|
||||
"order by\n"
|
||||
" [books_fts].rank"
|
||||
),
|
||||
),
|
||||
(
|
||||
{"include_rank": True},
|
||||
"FTS4",
|
||||
(
|
||||
"with original as (\n"
|
||||
" select\n"
|
||||
" rowid,\n"
|
||||
" *\n"
|
||||
" from [books]\n"
|
||||
")\n"
|
||||
"select\n"
|
||||
" [original].*,\n"
|
||||
" rank_bm25(matchinfo([books_fts], 'pcnalx')) rank\n"
|
||||
"from\n"
|
||||
" [original]\n"
|
||||
" join [books_fts] on [original].rowid = [books_fts].rowid\n"
|
||||
"where\n"
|
||||
" [books_fts] match :query\n"
|
||||
"order by\n"
|
||||
" rank_bm25(matchinfo([books_fts], 'pcnalx'))"
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_search_sql(kwargs, fts, expected):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue