Skip to main content

SQL search and ranking engine in multiple fields of database table

Project description

GitHub GitHub contributors Python package PyPI PyPI - Format GitHub Release Date

SQL_mutlisearch

Easy search engine into SQL tables with results raking and ordering.

Running

Package available on the following databases:

  • sqlite

Installation with

pip install SQL_multisearch

Initialization of the SQL_multisearch class with a simple JSON Body:

from SQL_multisearch import SQL_multisearch

body = {
    "connexion_infos":{...},
    "request": {...},
    "searchable_fields": {...}
}

SQLm = SQL_mutlisearch(body["connexion_infos"], body["request"], body["searchable_fields"])

Available SQL_mutisearch methods

The following methods are available for the SQL_multisearch class:

  • _count(): returns an integer with the number of results
  • _stats(): returns a dictionary with following schema: {'ranks': {'rank_value': count}, 'total': total}
  • _results(): returns a list of results with the following schema: [{'ranking': rank, 'values':{'field_name':'value', ...}}]
  • _columns(): returns a list of the table fields

Database connexion details

The body["connexion_infos"] value is a dictionary of multiple values:

{"connexion_infos":{
    "db_system": "sqlite",
    "db_url": "path to the database or url",
    "db_database": "name of the database",
    "db_table": "table name",
    "db_schema": "schema name"
}}

Authorized request actions

Multiple actions are possible with the body["request"] dictionary. It defines the structure and the caracteristics of the return result:

{"request":{
    "value": "string or integer to search",
    "value_type": "str|int",
    "operande": "like|left_like|right_like|ilike|left_ilike|right_ilike|=|>|>=|<|<=",
    "limit": "get an integer",
    "offset": "get an integer",
    "order": "asc|desc, default=desc",
    "schema":["list of field names to return in the result"]
}}

Ranking and searchable fields

SQL_multiserach gives a rank to each result. The research into the database table is possible into multiples fields. In order to give a different rank for each field, a piority can be indicate in the body. The body["searchable_fields"] allow search in multiple fields with different priorities.

["searchable_fields": [
    {
        "field": "field name",
        "priority": "get an integer"
    },
    ]
]

Exemple

from SQL_multisearch import *

body = {
    "connexion_infos": {
        "db_system": db_type,
        "db_url": db_url,
        "db_database": db_db,
        "db_table": db_table,
        "db_schema": db_schema
    },
    "request":{
        "value": "halles",
        "value_type": "str",
        "operande": "ilike",
        "limit":10,
        "offset":30,
        "order": "asc",
        "schema":["N_inventaire", "Rue", "Nom_site"]
    },
    "searchable_fields": [
        {
            "field": "Rue",
            "priority": 2
        },
        {
            "field": "Nom_site",
            "priority":1
        }
    ]
}

SQLm = SQL_multisearch(body["connexion_infos"], body["request"], body["searchable_fields"])
print(SQLm._count())
print(SQLm._results())
print(SQLm._columns())
print(SQLm._stats())
>>2
>>[{'values': {'N_inventaire': 3898, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 3899, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 3900, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 3901, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 3902, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 3903, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 3905, 'Rue': 'PIERRE LESCOT, RUE', 'Nom_site': 'HALLES_BALTARD'}, 'ranking': 1.4285714285714286}, {'values': {'N_inventaire': 131, 'Rue': 'BERGER, RUE', 'Nom_site': 'LES_HALLES'}, 'ranking': 1.6}, {'values': {'N_inventaire': 132, 'Rue': 'BERGER, RUE', 'Nom_site': 'LES_HALLES'}, 'ranking': 1.6}, {'values': {'N_inventaire': 133, 'Rue': 'BERGER, RUE', 'Nom_site': 'LES_HALLES'}, 'ranking': 1.6}]
>>['N_inventaire', 'Rue', 'N_rue', 'Nom_site', 'Arrondissement', 'Ville', 'Latitude_x', 'Longitude_y', 'Support', 'Couleur', 'Taille', 'Date_prise_vue', 'Photographe', 'Date_construction', 'Architecte', 'Classement_MH', 'Generalite_architecture', 'Mot_cle1', 'Mot_cle2', 'Mot_cle3', 'Mot_cle4', 'Mot_cle5', 'Mot_cle6', 'Cote_base', 'Cote_classement', 'Date_inventaire', 'Auteur']
>>{'ranks': {'1.4285714285714286': 7, '1.6': 3}, 'total': 10}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

SQL_multisearch-1.0.4-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file SQL_multisearch-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: SQL_multisearch-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 5.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.60.0 CPython/3.8.5

File hashes

Hashes for SQL_multisearch-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 163d6842a558336b368d7e171ce94d433028e8af92787407289f2f38037342b4
MD5 46809218bc14af01fcd427d5eb4a90f7
BLAKE2b-256 36e84dd38fe0135950a35b710de80017d9d380c7c026486e7be63ecf1c23375b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page