Skip to content

Commit 96ec028

Browse files
authored
Add storageurl field if missing in index (#1556)
* Add storageurl field * Add tests
1 parent 78ce92e commit 96ec028

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

app/backend/prepdocslib/searchmanager.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,18 @@ async def create_index(self, vectorizers: Optional[List[VectorSearchVectorizer]]
187187
await search_index_client.create_index(index)
188188
else:
189189
logger.info("Search index %s already exists", self.search_info.index_name)
190+
index_definition = await search_index_client.get_index(self.search_info.index_name)
191+
if not any(field.name == "storageUrl" for field in index_definition.fields):
192+
logger.info("Adding storageUrl field to index %s", self.search_info.index_name)
193+
index_definition.fields.append(
194+
SimpleField(
195+
name="storageUrl",
196+
type="Edm.String",
197+
filterable=True,
198+
facetable=False,
199+
),
200+
)
201+
await search_index_client.create_or_update_index(index_definition)
190202

191203
async def update_content(
192204
self, sections: List[Section], image_embeddings: Optional[List[List[float]]] = None, url: Optional[str] = None

tests/test_searchmanager.py

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
from azure.core.credentials import AzureKeyCredential
77
from azure.search.documents.aio import SearchClient
88
from azure.search.documents.indexes.aio import SearchIndexClient
9+
from azure.search.documents.indexes.models import (
10+
SearchFieldDataType,
11+
SearchIndex,
12+
SimpleField,
13+
)
914
from openai.types.create_embedding_response import Usage
1015

1116
from prepdocslib.embeddings import AzureOpenAIEmbeddingService
@@ -75,20 +80,72 @@ async def mock_list_index_names(self):
7580

7681
@pytest.mark.asyncio
7782
async def test_create_index_does_exist(monkeypatch, search_info):
78-
indexes = []
83+
created_indexes = []
84+
updated_indexes = []
7985

8086
async def mock_create_index(self, index):
81-
indexes.append(index)
87+
created_indexes.append(index)
88+
89+
async def mock_list_index_names(self):
90+
yield "test"
91+
92+
async def mock_get_index(self, *args, **kwargs):
93+
return SearchIndex(
94+
name="test",
95+
fields=[
96+
SimpleField(
97+
name="storageUrl",
98+
type=SearchFieldDataType.String,
99+
filterable=True,
100+
)
101+
],
102+
)
103+
104+
async def mock_create_or_update_index(self, index, *args, **kwargs):
105+
updated_indexes.append(index)
106+
107+
monkeypatch.setattr(SearchIndexClient, "create_index", mock_create_index)
108+
monkeypatch.setattr(SearchIndexClient, "list_index_names", mock_list_index_names)
109+
monkeypatch.setattr(SearchIndexClient, "get_index", mock_get_index)
110+
monkeypatch.setattr(SearchIndexClient, "create_or_update_index", mock_create_or_update_index)
111+
112+
manager = SearchManager(search_info)
113+
await manager.create_index()
114+
assert len(created_indexes) == 0, "It should not have created a new index"
115+
assert len(updated_indexes) == 0, "It should not have updated the existing index"
116+
117+
118+
@pytest.mark.asyncio
119+
async def test_create_index_add_field(monkeypatch, search_info):
120+
created_indexes = []
121+
updated_indexes = []
122+
123+
async def mock_create_index(self, index):
124+
created_indexes.append(index)
82125

83126
async def mock_list_index_names(self):
84127
yield "test"
85128

129+
async def mock_get_index(self, *args, **kwargs):
130+
return SearchIndex(
131+
name="test",
132+
fields=[],
133+
)
134+
135+
async def mock_create_or_update_index(self, index, *args, **kwargs):
136+
updated_indexes.append(index)
137+
86138
monkeypatch.setattr(SearchIndexClient, "create_index", mock_create_index)
87139
monkeypatch.setattr(SearchIndexClient, "list_index_names", mock_list_index_names)
140+
monkeypatch.setattr(SearchIndexClient, "get_index", mock_get_index)
141+
monkeypatch.setattr(SearchIndexClient, "create_or_update_index", mock_create_or_update_index)
88142

89143
manager = SearchManager(search_info)
90144
await manager.create_index()
91-
assert len(indexes) == 0, "It should not have created a new index"
145+
assert len(created_indexes) == 0, "It should not have created a new index"
146+
assert len(updated_indexes) == 1, "It should have updated the existing index"
147+
assert len(updated_indexes[0].fields) == 1
148+
assert updated_indexes[0].fields[0].name == "storageUrl"
92149

93150

94151
@pytest.mark.asyncio

0 commit comments

Comments
 (0)