Sfoglia il codice sorgente

WIP add search API to Django

Daoud Clarke 1 anno fa
parent
commit
86a6524f0a
3 ha cambiato i file con 29 aggiunte e 3 eliminazioni
  1. 20 0
      app/api.py
  2. 6 0
      app/settings.py
  3. 3 3
      mwmbl/tinysearchengine/search.py

+ 20 - 0
app/api.py

@@ -1,7 +1,27 @@
+from pathlib import Path
+
 from ninja import NinjaAPI
 from ninja import NinjaAPI
 
 
+from app import settings
+from mwmbl.indexer.paths import INDEX_NAME
+from mwmbl.tinysearchengine import search
+from mwmbl.tinysearchengine.completer import Completer
+from mwmbl.tinysearchengine.indexer import TinyIndex, Document
+from mwmbl.tinysearchengine.rank import HeuristicRanker
+
 api = NinjaAPI(version="1.0.0")
 api = NinjaAPI(version="1.0.0")
 
 
+index_path = Path(settings.DATA_PATH) / INDEX_NAME
+tiny_index = TinyIndex(item_factory=Document, index_path=index_path)
+tiny_index.__enter__()
+
+completer = Completer()
+ranker = HeuristicRanker(tiny_index, completer)
+
+search_router = search.create_router(ranker)
+
+api.add_router("/search/", search_router)
+
 
 
 @api.get("/hello")
 @api.get("/hello")
 def hello(request):
 def hello(request):

+ 6 - 0
app/settings.py

@@ -121,3 +121,9 @@ STATIC_URL = 'static/'
 # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
 # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
 
 
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+# ===================== Custom Settings =========================
+
+DATA_PATH = "./devdata"
+
+

+ 3 - 3
mwmbl/tinysearchengine/search.py

@@ -1,6 +1,6 @@
 from logging import getLogger
 from logging import getLogger
 
 
-from fastapi import APIRouter
+from ninja import Router
 
 
 from mwmbl.tinysearchengine.rank import HeuristicRanker
 from mwmbl.tinysearchengine.rank import HeuristicRanker
 
 
@@ -10,8 +10,8 @@ logger = getLogger(__name__)
 SCORE_THRESHOLD = 0.25
 SCORE_THRESHOLD = 0.25
 
 
 
 
-def create_router(ranker: HeuristicRanker) -> APIRouter:
-    router = APIRouter(prefix="/search", tags=["search"])
+def create_router(ranker: HeuristicRanker) -> Router:
+    router = Router(tags=["search"])
 
 
     @router.get("")
     @router.get("")
     def search(s: str):
     def search(s: str):