Поиск реализован
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")
|
||||
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 с учетом.
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user