meilisearch 集成

close #214
This commit is contained in:
Benny
2023-03-11 13:18:47 +01:00
parent 8fa6d30d3d
commit 6eeac01a9a
3 changed files with 17 additions and 9 deletions

View File

@@ -632,11 +632,14 @@ class ResourceMongoResource(ResourceResource, Mongo):
return self.mongodb_search(keyword)
def meili_search(self, keyword: "str", search_type: "str") -> dict:
returned = {"data": [], "comment": [], "extra": []}
if search_type == "default":
yyets = self.engine.search_yyets(keyword)
comment = self.engine.search_comment(keyword)
print(yyets)
print(comment)
returned["data"] = yyets
returned["comment"] = comment
return returned
# TODO: add more search type
elif search_type == "douban":
douban = self.engine.search_douban(keyword)
elif search_type == "fansub":
@@ -1310,6 +1313,8 @@ class SearchEngine(Base):
"data.info.aliasname": 1,
"data.info.area": 1,
"data.info.id": 1,
"data.info.channel_cn": 1,
"data.info.channel": 1,
}
douban_projection = {
@@ -1349,7 +1354,7 @@ class SearchEngine(Base):
return self.db["yyets"].aggregate(
[
{"$project": self.yyets_projection},
{"$replaceRoot": {"newRoot": "$data.info"}},
{"$replaceRoot": {"newRoot": {"$mergeObjects": [{"origin": "yyets"}, "$data.info"]}}},
]
)
@@ -1380,13 +1385,13 @@ class SearchEngine(Base):
self.douban_index.add_documents(data, primary_key="resourceId")
def search_yyets(self, keyword: "str"):
return self.yyets_index.search(keyword, {"matchingStrategy": "all"})
return self.yyets_index.search(keyword, {"matchingStrategy": "all"})["hits"]
def search_comment(self, keyword: "str"):
return self.comment_index.search(keyword, {"matchingStrategy": "all"})
return self.comment_index.search(keyword, {"matchingStrategy": "all"})["hits"]
def search_douban(self, keyword: "str"):
return self.douban_index.search(keyword, {"matchingStrategy": "all"})
return self.douban_index.search(keyword, {"matchingStrategy": "all"})["hits"]
def run_import(self):
t0 = time.time()

View File

@@ -300,7 +300,10 @@ class ResourceHandler(BaseHandler):
@run_on_executor()
def search_resource(self):
kw = self.get_query_argument("keyword").lower()
search_type = self.get_query_argument("type", "default")
# TODO 搜索模式支持
# search_type = self.get_query_argument("type", "default")
search_type = "default"
self.set_header("search-engine", "Meilisearch" if os.getenv("MEILISEARCH") else "MongoDB")
return self.instance.search_resource(kw, search_type)
@gen.coroutine
@@ -884,7 +887,6 @@ class DBDumpHandler(BaseHandler):
"date": value[1],
"size": value[2],
}
print(result)
return result
@gen.coroutine

View File

@@ -155,7 +155,8 @@ if __name__ == "__main__":
if not os.getenv("PYTHON_DEV"):
threading.Thread(target=entry_dump).start()
# meilisearch tasks
if os.getenv("MEILI_SEARCH"):
if os.getenv("MEILISEARCH"):
logging.info("%s Searching with Meilisearch. %s", "#" * 10, "#" * 10)
threading.Thread(target=engine.run_import).start()
threading.Thread(target=engine.monitor_yyets).start()
threading.Thread(target=engine.monitor_douban).start()