From d306b61b2dcdab5abcd70382aa8ef8a05ad75a80 Mon Sep 17 00:00:00 2001 From: crunk Date: Wed, 12 Jul 2023 21:09:22 +0200 Subject: [PATCH] search the library --- .gitignore | 1 + library/searchtest.py | 56 ++++++++++++++++++++++++++++++++++++ library/static/css/style.css | 2 +- library/static/js/search.js | 23 +++++++++++++++ library/templates/index.html | 2 ++ library/templates/menu.html | 2 +- requirements.txt | 3 ++ 7 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 library/searchtest.py create mode 100644 library/static/js/search.js diff --git a/.gitignore b/.gitignore index e12f1b9..37b70e4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ build/ dist/ pip-wheel-metadata/ +library/data diff --git a/library/searchtest.py b/library/searchtest.py new file mode 100644 index 0000000..27af0d8 --- /dev/null +++ b/library/searchtest.py @@ -0,0 +1,56 @@ +from whoosh.index import create_in +from whoosh.fields import * +from whoosh.qparser import QueryParser + +import csv +import os +import argparse +from csvparser.csvparser import getfullpublication + +SCRIPT_DIR = os.path.dirname(__file__) +DATA_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "data")) + + +def index_csv_file(): + filename = os.path.join(DATA_DIR, "varlib.csv") + with open(filename, 'r', encoding='utf_8_sig') as libcsv: + csv_as_dict = csv.DictReader(libcsv) + for row in csv_as_dict: + rowcontent = concatenate_csv_row(row) + writer.add_document(title=row["Id"], path=u"/a", content=rowcontent) + writer.commit() + +def search(searchinput): + with ix.searcher() as searcher: + query = QueryParser("content", ix.schema).parse(searchinput) + results = searcher.search(query) + bookid = results[0]['title'] + for book in results: + bookid = book['title'] + print(f"result found: {bookid}") + publication = getfullpublication(bookid) + print(f"{publication['Author']} - {publication['Title']}") + + +def concatenate_csv_row(row): + rowcontent = [] + rowcontent.append(row["Publication"]) + rowcontent.append(row["Author"]) + rowcontent.append(row["Fields"]) + rowcontent.append(row["Type"]) + rowcontent.append(row["Publishers"]) + rowcontent.append(row["Highlights"]) + rowcontent.append(row["Comments"]) + return ' '.join(rowcontent) + +parser = argparse.ArgumentParser() +parser.add_argument("-s", "--search", type=str) +args = parser.parse_args() +searchinput = args.search + +schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT) +ix = create_in(DATA_DIR, schema) +writer = ix.writer() +index_csv_file() +print(searchinput) +search(searchinput) diff --git a/library/static/css/style.css b/library/static/css/style.css index 81ec880..26c87b7 100644 --- a/library/static/css/style.css +++ b/library/static/css/style.css @@ -43,7 +43,7 @@ body:after { margin: 1em 0; } -#tagsearch{ +#booksearch{ background: #f1f1f1; text-decoration: none; text-overflow: ellipsis; diff --git a/library/static/js/search.js b/library/static/js/search.js new file mode 100644 index 0000000..e8c77ee --- /dev/null +++ b/library/static/js/search.js @@ -0,0 +1,23 @@ +let searchInput = document.getElementById('booksearch'); +let timeout = null; +// Listen for keystroke events +searchInput.addEventListener('keyup', function (e) { + // Clear the timeout if it has already been set. + clearTimeout(timeout); + // Make a new timeout set to go off in 1000ms (1 second) + timeout = setTimeout(function () { + if (searchInput.value.length > 2) { + searchTags(searchInput.value); + } else { + clearSearchTags(); + } + }, 1000); +}); + +function searchTags(searchInput) { + console.log(searchInput); +} + +function clearSearchTags() { + console.log("stop search"); +} diff --git a/library/templates/index.html b/library/templates/index.html index a21bf1e..c2170bb 100644 --- a/library/templates/index.html +++ b/library/templates/index.html @@ -31,4 +31,6 @@ {% endfor%} + + {% endblock %} diff --git a/library/templates/menu.html b/library/templates/menu.html index 1bc70ec..2245d0c 100644 --- a/library/templates/menu.html +++ b/library/templates/menu.html @@ -26,6 +26,6 @@ {% endblock menu %} diff --git a/requirements.txt b/requirements.txt index df572c0..00ea7ca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ +anyascii==0.3.2 +attrs==23.1.0 bcrypt==4.0.1 blinker==1.6.2 certifi==2023.5.7 @@ -13,6 +15,7 @@ itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.3 Pillow==10.0.0 +pyahocorasick==2.0.0 python-dateutil==2.8.2 pytz==2023.3 requests==2.31.0