Skip to content

Commit b437454

Browse files
committed
add exact search
1 parent e2c4c5f commit b437454

File tree

3 files changed

+77
-13
lines changed

3 files changed

+77
-13
lines changed

src/routes/page/instruction/testing/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@
193193
bind:value={text}
194194
on:keydown={(e) => pressKey(e)}
195195
/>
196-
<div class="text-secondary text-count" style="display: flex; justify-content: space-between;">
196+
<div class="text-secondary text-count d-flex justify-content-between">
197197
<div>
198198
{#if elapsedTime}
199199
{`Elapsed time: ${elapsedTime}`}

src/routes/page/knowledge-base/documents/+page.svelte

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
const duration = 2000;
5151
const maxLength = 4096;
5252
const step = 0.1;
53+
const searchLimit = 10;
5354
const enableVector = true;
5455
const collectionType = KnowledgeCollectionType.Document;
5556
@@ -58,6 +59,7 @@
5859
let successText = "Done";
5960
let errorText = "Error";
6061
let confidence = '0.5';
62+
let elapsedTime = '';
6163
6264
/** @type {string} */
6365
let selectedCollection;
@@ -113,6 +115,7 @@
113115
let textSearch = false;
114116
let isAdvSearchOn = false;
115117
let disableSearchBtn = false;
118+
let isExactSearch = false;
116119
117120
/** @type {any} */
118121
let docUploadrCmp;
@@ -135,10 +138,11 @@
135138
sort: null
136139
};
137140
138-
$: disabled = isLoading || isLoadingMore || isSearching;
141+
$: disableBase = isLoading || isLoadingMore || isSearching;
142+
$: disabled = !selectedCollection || disableBase;
139143
$: {
140144
disableSearchBtn = false;
141-
if (isSearching || isLoadingMore) {
145+
if (!selectedCollection || isSearching || isLoadingMore) {
142146
disableSearchBtn = true;
143147
} else if (textSearch && searchItems.length > 0) {
144148
disableSearchBtn = false;
@@ -184,6 +188,8 @@
184188
isSearching = true;
185189
searchDone = false;
186190
isFromSearch = false;
191+
elapsedTime = '';
192+
const start = new Date();
187193
188194
innerSearchGroups = buildSearchFilterGroups(searchItems);
189195
innerSort = buildSearchSort(sortField, sortOrder);
@@ -200,13 +206,18 @@
200206
}).finally(() => {
201207
isSearching = false;
202208
searchDone = true;
209+
const gap = new Date().getTime() - start.getTime();
210+
elapsedTime = `${(gap / 1000).toFixed(3)}s`;
203211
});
204212
} else {
213+
/** @type {import('$knowledgeTypes').SearchKnowledgeRequest} */
205214
const params = {
206215
text: util.trim(text),
216+
limit: searchLimit,
207217
confidence: Number(validateConfidenceNumber(confidence)),
208218
with_vector: enableVector,
209-
filter_groups: innerSearchGroups
219+
filter_groups: innerSearchGroups,
220+
search_param: { exact_search: isExactSearch }
210221
};
211222
212223
searchVectorKnowledge(selectedCollection, params).then(res => {
@@ -217,6 +228,8 @@
217228
isSearching = false;
218229
searchDone = true;
219230
nextId = null;
231+
const gap = new Date().getTime() - start.getTime();
232+
elapsedTime = `${(gap / 1000).toFixed(3)}s`;
220233
});
221234
}
222235
}
@@ -260,12 +273,14 @@
260273
}
261274
262275
function resetStates() {
276+
elapsedTime = '';
263277
text = "";
264278
nextId = null;
265279
isSearching = false;
266280
searchDone = false;
267281
isFromSearch = false;
268282
textSearch = false;
283+
isExactSearch = false;
269284
selectedOperator = 'or';
270285
innerSearchGroups = [];
271286
sortField = '';
@@ -938,8 +953,13 @@
938953
bind:value={text}
939954
on:keydown={(e) => pressKey(e)}
940955
/>
941-
<div class="text-secondary text-end text-count">
942-
{text?.length || 0}/{maxLength}
956+
<div class="text-secondary text-count d-flex justify-content-between">
957+
<div>
958+
{#if elapsedTime}
959+
{`Elapsed time: ${elapsedTime}`}
960+
{/if}
961+
</div>
962+
<div>{text?.length || 0}/{maxLength}</div>
943963
</div>
944964
945965
<div class="mt-3 knowledge-search-footer">
@@ -992,6 +1012,19 @@
9921012
<span>{'Keyword search'}</span>
9931013
</div>
9941014
</div>
1015+
{#if !textSearch}
1016+
<div class="search-input justify-content-center">
1017+
<div class="line-align-center">
1018+
<Input
1019+
class='input-text fw-bold'
1020+
type="checkbox"
1021+
label="Exact search"
1022+
disabled={disabled}
1023+
bind:checked={isExactSearch}
1024+
/>
1025+
</div>
1026+
</div>
1027+
{/if}
9951028
<div class="line-align-center">
9961029
<Button
9971030
color="primary"
@@ -1118,7 +1151,7 @@
11181151
>
11191152
<Button
11201153
class="btn btn-sm btn-soft-primary collection-action-btn"
1121-
disabled={disabled}
1154+
disabled={disableBase}
11221155
on:click={() => toggleCollectionCreate()}
11231156
>
11241157
<i class="mdi mdi-plus" />

src/routes/page/knowledge-base/question-answer/+page.svelte

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
const duration = 2000;
5151
const maxLength = 4096;
5252
const step = 0.1;
53+
const searchLimit = 10;
5354
const enableVector = true;
5455
const collectionType = KnowledgeCollectionType.QuestionAnswer;
5556
@@ -58,6 +59,7 @@
5859
let successText = "Done";
5960
let errorText = "Error";
6061
let confidence = '0.5';
62+
let elapsedTime = '';
6163
6264
/** @type {string} */
6365
let selectedCollection;
@@ -116,6 +118,7 @@
116118
let textSearch = false;
117119
let isAdvSearchOn = false;
118120
let disableSearchBtn = false;
121+
let isExactSearch = false;
119122
120123
/** @type {{
121124
* startId: string | null,
@@ -135,10 +138,11 @@
135138
sort: null
136139
};
137140
138-
$: disabled = isLoading || isLoadingMore || isSearching;
141+
$: disableBase = isLoading || isLoadingMore || isSearching;
142+
$: disabled = !selectedCollection || disableBase;
139143
$: {
140144
disableSearchBtn = false;
141-
if (isSearching || isLoadingMore) {
145+
if (!selectedCollection || isSearching || isLoadingMore) {
142146
disableSearchBtn = true;
143147
} else if (textSearch && searchItems.length > 0) {
144148
disableSearchBtn = false;
@@ -184,6 +188,8 @@
184188
isSearching = true;
185189
searchDone = false;
186190
isFromSearch = false;
191+
elapsedTime = '';
192+
const start = new Date();
187193
188194
innerSearchGroups = buildSearchFilterGroups(searchItems);
189195
innerSort = buildSearchSort(sortField, sortOrder);
@@ -200,15 +206,18 @@
200206
}).finally(() => {
201207
isSearching = false;
202208
searchDone = true;
209+
const gap = new Date().getTime() - start.getTime();
210+
elapsedTime = `${(gap / 1000).toFixed(3)}s`;
203211
});
204212
} else {
205213
/** @type {import('$knowledgeTypes').SearchKnowledgeRequest} */
206214
const params = {
207215
text: util.trim(text),
216+
limit: searchLimit,
208217
confidence: Number(validateConfidenceNumber(confidence)),
209218
with_vector: enableVector,
210219
filter_groups: innerSearchGroups,
211-
search_param: { exact_search: false }
220+
search_param: { exact_search: isExactSearch }
212221
};
213222
214223
searchVectorKnowledge(selectedCollection, params).then(res => {
@@ -219,6 +228,8 @@
219228
isSearching = false;
220229
searchDone = true;
221230
nextId = null;
231+
const gap = new Date().getTime() - start.getTime();
232+
elapsedTime = `${(gap / 1000).toFixed(3)}s`;
222233
});
223234
}
224235
}
@@ -264,11 +275,13 @@
264275
265276
function resetStates() {
266277
text = "";
278+
elapsedTime = '';
267279
nextId = null;
268280
isSearching = false;
269281
searchDone = false;
270282
isFromSearch = false;
271283
textSearch = false;
284+
isExactSearch = false;
272285
selectedOperator = 'or';
273286
innerSearchGroups = [];
274287
sortField = '';
@@ -924,8 +937,13 @@
924937
bind:value={text}
925938
on:keydown={(e) => pressKey(e)}
926939
/>
927-
<div class="text-secondary text-end text-count">
928-
{text?.length || 0}/{maxLength}
940+
<div class="text-secondary text-count d-flex justify-content-between">
941+
<div>
942+
{#if elapsedTime}
943+
{`Elapsed time: ${elapsedTime}`}
944+
{/if}
945+
</div>
946+
<div>{text?.length || 0}/{maxLength}</div>
929947
</div>
930948
931949
<div class="mt-3 knowledge-search-footer">
@@ -978,6 +996,19 @@
978996
<span>{'Keyword search'}</span>
979997
</div>
980998
</div>
999+
{#if !textSearch}
1000+
<div class="search-input justify-content-center">
1001+
<div class="line-align-center">
1002+
<Input
1003+
class='input-text fw-bold'
1004+
type="checkbox"
1005+
label="Exact search"
1006+
disabled={disabled}
1007+
bind:checked={isExactSearch}
1008+
/>
1009+
</div>
1010+
</div>
1011+
{/if}
9811012
<div class="line-align-center">
9821013
<Button
9831014
color="primary"
@@ -1090,7 +1121,7 @@
10901121
>
10911122
<Button
10921123
class="btn btn-sm btn-soft-primary collection-action-btn"
1093-
disabled={disabled}
1124+
disabled={disableBase}
10941125
on:click={() => toggleCollectionCreate()}
10951126
>
10961127
<i class="mdi mdi-plus" />

0 commit comments

Comments
 (0)