@@ -138,16 +138,17 @@ def delete_restaurant(self, restaurant_id: str) -> None:
138
138
"""指定されたIDのレストランを削除する"""
139
139
self .container .delete_item (item = restaurant_id , partition_key = restaurant_id )
140
140
141
- def search_restaurants (self , query : str , k : int = 3 ) -> list [Restaurant ]:
142
- """キーワードによるレストランのベクトル検索を実行する"""
141
+ def search_restaurants (self , query : str , k : int = 3 , offset : int = 0 ) -> list [Restaurant ]:
142
+ """キーワードによるレストランのベクトル検索を実行する(ページネーション対応) """
143
143
# クエリテキストのベクトル埋め込みを生成
144
144
query_embedding = self ._get_embeddings (query )
145
145
146
- # ベクトル検索クエリの実行
146
+ # ベクトル検索クエリの実行(オフセットとリミットを適用)
147
147
query_text = f"""
148
- SELECT TOP { k } *
148
+ SELECT *
149
149
FROM c
150
150
ORDER BY VectorDistance(c.vector, @queryVector)
151
+ OFFSET { offset } LIMIT { k }
151
152
"""
152
153
153
154
parameters = [{"name" : "@queryVector" , "value" : query_embedding }]
@@ -157,18 +158,19 @@ def search_restaurants(self, query: str, k: int = 3) -> list[Restaurant]:
157
158
return [self ._cosmos_item_to_restaurant (item ) for item in items ]
158
159
159
160
def find_nearby_restaurants (
160
- self , latitude : float , longitude : float , distance_km : float = 5.0 , limit : int = 10
161
+ self , latitude : float , longitude : float , distance_km : float = 5.0 , limit : int = 10 , offset : int = 0
161
162
) -> list [Restaurant ]:
162
- """指定した位置の近くにあるレストランを検索する"""
163
+ """指定した位置の近くにあるレストランを検索する(ページネーション対応) """
163
164
# 地理空間クエリの実行(メートル単位で距離を指定)
164
165
distance_meters = distance_km * 1000
165
166
query_text = f"""
166
- SELECT TOP { limit } *
167
+ SELECT *
167
168
FROM c
168
169
WHERE ST_DISTANCE(c.location, {{
169
170
"type": "Point",
170
171
"coordinates": [{ longitude } , { latitude } ]
171
172
}}) < { distance_meters }
173
+ OFFSET { offset } LIMIT { limit }
172
174
"""
173
175
174
176
items = list (self .container .query_items (query = query_text , enable_cross_partition_query = True ))
0 commit comments