search the library

This commit is contained in:
crunk 2023-07-12 21:09:22 +02:00
parent ff30e05391
commit d306b61b2d
7 changed files with 87 additions and 2 deletions

1
.gitignore vendored
View File

@ -6,3 +6,4 @@
build/
dist/
pip-wheel-metadata/
library/data

56
library/searchtest.py Normal file
View File

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

View File

@ -43,7 +43,7 @@ body:after {
margin: 1em 0;
}
#tagsearch{
#booksearch{
background: #f1f1f1;
text-decoration: none;
text-overflow: ellipsis;

View File

@ -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");
}

View File

@ -31,4 +31,6 @@
{% endfor%}
</div>
<script src="{{ url_for('static', filename='js/dropdown.js')}}"></script>
<script src="{{ url_for('static', filename='js/search.js')}}"></script>
{% endblock %}

View File

@ -26,6 +26,6 @@
</div>
</div>
<div class="dropdown">
<input id="tagsearch" type="text" placeholder="🔍 Search..">
<input id="booksearch" type="text" placeholder="🔍 Search..">
</div>
{% endblock menu %}

View File

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