Поиск реализован

This commit is contained in:
2026-03-14 10:26:28 +10:00
parent 424c82fa1c
commit 12987ef578

78
main.py
View File

@@ -198,6 +198,8 @@ def get_records_count(item: str = "default"):
cur.execute("SELECT COUNT(*) FROM url WHERE viewed = true")
elif item == "status":
cur.execute("SELECT COUNT(*) FROM url WHERE status = true")
elif item == "time":
cur.execute("SELECT COUNT(*) FROM url")
else:
cur.execute("SELECT COUNT(*) FROM url")
result = cur.fetchone()
@@ -208,69 +210,18 @@ def get_records_count(item: str = "default"):
if conn:
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="Получить количество результатов поиска")
def get_poisk_count(query: str, item: str = "default"):
conn = None
try:
conn = get_connection()
with conn.cursor() as cur:
base_query = "SELECT COUNT(*) FROM url WHERE (title ILIKE %s OR original_text ILIKE %s)"
params = [f"%{query}%", f"%{query}%"]
search_pattern = 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":
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:
conn = get_connection()
with conn.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur:
base_query = """
SELECT * FROM url
WHERE (title ILIKE %s OR original_text ILIKE %s)
"""
params = [f"%{query}%", f"%{query}%"]
search_pattern = f"%{query}%"
base_query = """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
)"""
params = [search_pattern] * 7
if item == "viewed":
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()
@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 с учетом.
"""