mirror of https://gitee.com/bigwinds/arangodb
issue #2072
This commit is contained in:
parent
b387ff6289
commit
7f61b00926
|
@ -331,6 +331,7 @@ TRI_fulltext_handle_t TRI_InsertHandleFulltextIndex(
|
|||
|
||||
// fill in document
|
||||
slot->_documents[slotPosition] = document;
|
||||
slot->_deleted[slotPosition] = 0;
|
||||
slot->_numUsed++;
|
||||
// no need to fill in deleted flag as it is initialized to false
|
||||
|
||||
|
|
|
@ -1114,6 +1114,7 @@ static TRI_fulltext_result_t* MakeListResult(index__t* const idx,
|
|||
TRI_fulltext_result_t* result;
|
||||
TRI_fulltext_list_entry_t* listEntries;
|
||||
uint32_t numResults;
|
||||
uint32_t originalNumResults;
|
||||
uint32_t i, pos;
|
||||
|
||||
if (list == nullptr) {
|
||||
|
@ -1123,6 +1124,7 @@ static TRI_fulltext_result_t* MakeListResult(index__t* const idx,
|
|||
// we have a list of handles
|
||||
// now turn the handles into documents and exclude deleted ones on the fly
|
||||
numResults = TRI_NumEntriesListFulltextIndex(list);
|
||||
originalNumResults = numResults;
|
||||
if (static_cast<size_t>(numResults) > maxResults && maxResults > 0) {
|
||||
// cap the number of results
|
||||
numResults = static_cast<uint32_t>(maxResults);
|
||||
|
@ -1136,7 +1138,7 @@ static TRI_fulltext_result_t* MakeListResult(index__t* const idx,
|
|||
pos = 0;
|
||||
listEntries = TRI_StartListFulltextIndex(list);
|
||||
|
||||
for (i = 0; i < numResults; ++i) {
|
||||
for (i = 0; i < originalNumResults; ++i) {
|
||||
TRI_fulltext_handle_t handle;
|
||||
TRI_fulltext_doc_t doc;
|
||||
|
||||
|
@ -1149,6 +1151,9 @@ static TRI_fulltext_result_t* MakeListResult(index__t* const idx,
|
|||
}
|
||||
|
||||
result->_documents[pos++] = doc;
|
||||
if (pos >= numResults) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
result->_numDocuments = pos;
|
||||
|
@ -1591,8 +1596,6 @@ TRI_fulltext_result_t* TRI_QueryFulltextIndex(TRI_fts_index_t* const ftx,
|
|||
}
|
||||
}
|
||||
|
||||
TRI_ReadUnlockReadWriteLock(&idx->_lock);
|
||||
|
||||
TRI_FreeQueryFulltextIndex(query);
|
||||
|
||||
if (result == nullptr) {
|
||||
|
@ -1602,7 +1605,10 @@ TRI_fulltext_result_t* TRI_QueryFulltextIndex(TRI_fts_index_t* const ftx,
|
|||
|
||||
// now convert the handle list into a result (this will also filter out
|
||||
// deleted documents)
|
||||
return MakeListResult(idx, result, maxResults);
|
||||
TRI_fulltext_result_t* r = MakeListResult(idx, result, maxResults);
|
||||
TRI_ReadUnlockReadWriteLock(&idx->_lock);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
Loading…
Reference in New Issue