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:
Jacob Chapman 2022-08-30 22:40:35 -05:00 committed by GitHub
commit ecf1d40112
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 0 deletions

View file

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