Skip to content

Commit 7588bc4

Browse files
authored
Merge pull request #7 from video-db/ar/add-keyword-search
Ar/add keyword search
2 parents 6646cd8 + 17a195f commit 7588bc4

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

videodb/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from typing import Optional
77
from videodb._utils._video import play_stream
8-
from videodb._constants import VIDEO_DB_API, MediaType
8+
from videodb._constants import VIDEO_DB_API, MediaType, SearchType
99
from videodb.client import Connection
1010
from videodb.exceptions import (
1111
VideodbError,
@@ -16,7 +16,7 @@
1616

1717
logger: logging.Logger = logging.getLogger("videodb")
1818

19-
__version__ = "0.0.3"
19+
__version__ = "0.0.4"
2020
__author__ = "videodb"
2121

2222
__all__ = [
@@ -26,6 +26,7 @@
2626
"SearchError",
2727
"play_stream",
2828
"MediaType",
29+
"SearchType",
2930
]
3031

3132

videodb/_constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class MediaType:
1111

1212
class SearchType:
1313
semantic = "semantic"
14+
keyword = "keyword"
1415

1516

1617
class IndexType:

videodb/search.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def search_inside_video(
116116
search_data = self._connection.post(
117117
path=f"{ApiPath.video}/{video_id}/{ApiPath.search}",
118118
data={
119-
"type": SearchType.semantic,
119+
"index_type": SearchType.semantic,
120120
"query": query,
121121
"score_threshold": score_threshold
122122
or SemanticSearchDefaultValues.score_threshold,
@@ -137,7 +137,7 @@ def search_inside_collection(
137137
search_data = self._connection.post(
138138
path=f"{ApiPath.collection}/{collection_id}/{ApiPath.search}",
139139
data={
140-
"type": SearchType.semantic,
140+
"index_type": SearchType.semantic,
141141
"query": query,
142142
"score_threshold": score_threshold
143143
or SemanticSearchDefaultValues.score_threshold,
@@ -148,7 +148,35 @@ def search_inside_collection(
148148
return SearchResult(self._connection, **search_data)
149149

150150

151-
search_type = {SearchType.semantic: SemanticSearch}
151+
class KeywordSearch(Search):
152+
def __init__(self, _connection):
153+
self._connection = _connection
154+
155+
def search_inside_video(
156+
self,
157+
video_id: str,
158+
query: str,
159+
result_threshold: Optional[int] = None,
160+
score_threshold: Optional[int] = None,
161+
dynamic_score_percentage: Optional[int] = None,
162+
**kwargs,
163+
):
164+
search_data = self._connection.post(
165+
path=f"{ApiPath.video}/{video_id}/{ApiPath.search}",
166+
data={
167+
"index_type": SearchType.keyword,
168+
"query": query,
169+
"score_threshold": score_threshold,
170+
"result_threshold": result_threshold,
171+
},
172+
)
173+
return SearchResult(self._connection, **search_data)
174+
175+
def search_inside_collection(**kwargs):
176+
raise NotImplementedError("Keyword search will be implemented in the future")
177+
178+
179+
search_type = {SearchType.semantic: SemanticSearch, SearchType.keyword: KeywordSearch}
152180

153181

154182
class SearchFactory:

0 commit comments

Comments
 (0)