Поиск реализован
This commit is contained in:
78
main.py
78
main.py
@@ -198,6 +198,8 @@ def get_records_count(item: str = "default"):
|
|||||||
cur.execute("SELECT COUNT(*) FROM url WHERE viewed = true")
|
cur.execute("SELECT COUNT(*) FROM url WHERE viewed = true")
|
||||||
elif item == "status":
|
elif item == "status":
|
||||||
cur.execute("SELECT COUNT(*) FROM url WHERE status = true")
|
cur.execute("SELECT COUNT(*) FROM url WHERE status = true")
|
||||||
|
elif item == "time":
|
||||||
|
cur.execute("SELECT COUNT(*) FROM url")
|
||||||
else:
|
else:
|
||||||
cur.execute("SELECT COUNT(*) FROM url")
|
cur.execute("SELECT COUNT(*) FROM url")
|
||||||
result = cur.fetchone()
|
result = cur.fetchone()
|
||||||
@@ -208,69 +210,18 @@ def get_records_count(item: str = "default"):
|
|||||||
if conn:
|
if conn:
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
# @app.get("/poisk", summary="Поиск по текстовым полям", response_model=List[ParsedData])
|
|
||||||
# def poisk(
|
|
||||||
# query: str = Query(..., description="Строка для поиска"),
|
|
||||||
# offset: int = Query(0, ge=0),
|
|
||||||
# limit: int = Query(10, ge=1, le=500)
|
|
||||||
# ):
|
|
||||||
# """
|
|
||||||
# Поиск по текстовым полям таблицы url (title, original_text, translation_text, short_text, url, category, other).
|
|
||||||
# Частичное совпадение без учета регистра (ILIKE).
|
|
||||||
# """
|
|
||||||
# conn = None
|
|
||||||
# try:
|
|
||||||
# conn = get_connection()
|
|
||||||
# with conn.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur:
|
|
||||||
# search_pattern = f"%{query}%"
|
|
||||||
# cur.execute("""
|
|
||||||
# SELECT * FROM url
|
|
||||||
# WHERE title ILIKE %s
|
|
||||||
# OR original_text ILIKE %s
|
|
||||||
# OR translation_text ILIKE %s
|
|
||||||
# OR short_text ILIKE %s
|
|
||||||
# OR url ILIKE %s
|
|
||||||
# OR category ILIKE %s
|
|
||||||
# OR other ILIKE %s
|
|
||||||
# ORDER BY parsed_at DESC
|
|
||||||
# OFFSET %s LIMIT %s
|
|
||||||
# """, (search_pattern, search_pattern, search_pattern, search_pattern,
|
|
||||||
# search_pattern, search_pattern, search_pattern, offset, limit))
|
|
||||||
# rows = cur.fetchall()
|
|
||||||
# results = [dict(row) for row in rows]
|
|
||||||
# return results
|
|
||||||
# except Exception as e:
|
|
||||||
# raise HTTPException(status_code=500, detail=f"Ошибка при поиске: {e}")
|
|
||||||
# finally:
|
|
||||||
# if conn:
|
|
||||||
# conn.close()
|
|
||||||
|
|
||||||
# @app.get("/poisk/count", summary="Получить количество результатов поиска")
|
|
||||||
# def get_poisk_count(query: str):
|
|
||||||
# conn = None
|
|
||||||
# try:
|
|
||||||
# conn = get_connection()
|
|
||||||
# with conn.cursor() as cur:
|
|
||||||
# cur.execute(
|
|
||||||
# "SELECT COUNT(*) FROM url WHERE title ILIKE %s OR original_text ILIKE %s",
|
|
||||||
# (f"%{query}%", f"%{query}%")
|
|
||||||
# )
|
|
||||||
# result = cur.fetchone()
|
|
||||||
# return {"count": result[0]}
|
|
||||||
# except Exception as e:
|
|
||||||
# raise HTTPException(status_code=500, detail=f"Ошибка при получении количества: {e}")
|
|
||||||
# finally:
|
|
||||||
# if conn:
|
|
||||||
# conn.close()
|
|
||||||
@app.get("/poisk/count", summary="Получить количество результатов поиска")
|
@app.get("/poisk/count", summary="Получить количество результатов поиска")
|
||||||
def get_poisk_count(query: str, item: str = "default"):
|
def get_poisk_count(query: str, item: str = "default"):
|
||||||
conn = None
|
conn = None
|
||||||
try:
|
try:
|
||||||
conn = get_connection()
|
conn = get_connection()
|
||||||
with conn.cursor() as cur:
|
with conn.cursor() as cur:
|
||||||
base_query = "SELECT COUNT(*) FROM url WHERE (title ILIKE %s OR original_text ILIKE %s)"
|
search_pattern = f"%{query}%"
|
||||||
params = [f"%{query}%", f"%{query}%"]
|
base_query = """SELECT COUNT(*) FROM url WHERE (
|
||||||
|
title ILIKE %s OR original_text ILIKE %s OR translation_text ILIKE %s
|
||||||
|
OR short_text ILIKE %s OR url ILIKE %s OR category ILIKE %s OR other ILIKE %s
|
||||||
|
)"""
|
||||||
|
params = [search_pattern] * 7
|
||||||
|
|
||||||
if item == "viewed":
|
if item == "viewed":
|
||||||
base_query += " AND viewed = true"
|
base_query += " AND viewed = true"
|
||||||
@@ -292,11 +243,12 @@ def poisk(query: str, offset: int = Query(0, ge=0), limit: int = Query(10, ge=1,
|
|||||||
try:
|
try:
|
||||||
conn = get_connection()
|
conn = get_connection()
|
||||||
with conn.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur:
|
with conn.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur:
|
||||||
base_query = """
|
search_pattern = f"%{query}%"
|
||||||
SELECT * FROM url
|
base_query = """SELECT * FROM url WHERE (
|
||||||
WHERE (title ILIKE %s OR original_text ILIKE %s)
|
title ILIKE %s OR original_text ILIKE %s OR translation_text ILIKE %s
|
||||||
"""
|
OR short_text ILIKE %s OR url ILIKE %s OR category ILIKE %s OR other ILIKE %s
|
||||||
params = [f"%{query}%", f"%{query}%"]
|
)"""
|
||||||
|
params = [search_pattern] * 7
|
||||||
|
|
||||||
if item == "viewed":
|
if item == "viewed":
|
||||||
base_query += " AND viewed = true"
|
base_query += " AND viewed = true"
|
||||||
@@ -317,7 +269,7 @@ def poisk(query: str, offset: int = Query(0, ge=0), limit: int = Query(10, ge=1,
|
|||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
@app.get("/records_all", summary="Получить все записи из БД + сортирует + пагинация", response_model=List[ParsedData])
|
@app.get("/records_all", summary="Получить все записи из БД + сортирует + пагинация", response_model=List[ParsedData])
|
||||||
def get_records(item: str = "default", offset: int = Query(0, ge=0), limit: int = Query(10, ge=1, le=500)):
|
def get_records(item: str = "default", offset: int = Query(0, ge=0), limit: int = Query(10, ge=1, le=100)):
|
||||||
"""
|
"""
|
||||||
Возвращает записи из таблицы url с учетом.
|
Возвращает записи из таблицы url с учетом.
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user