Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
a6f1de03
M
milvus
项目概览
milvus
/
milvus
大约 1 年 前同步成功
通知
261
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a6f1de03
编写于
3月 30, 2021
作者:
X
xige-16
提交者:
yefu.chen
3月 30, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Optimize search performance in query node
Signed-off-by:
N
xige-16
<
xi.ge@zilliz.com
>
上级
fd282d3c
变更
11
显示空白变更内容
内联
并排
Showing
11 changed file
with
160 addition
and
57 deletion
+160
-57
internal/core/src/segcore/SegmentInterface.cpp
internal/core/src/segcore/SegmentInterface.cpp
+1
-1
internal/core/src/segcore/reduce_c.cpp
internal/core/src/segcore/reduce_c.cpp
+50
-0
internal/core/src/segcore/reduce_c.h
internal/core/src/segcore/reduce_c.h
+7
-0
internal/querynode/load_service_test.go
internal/querynode/load_service_test.go
+6
-6
internal/querynode/plan.go
internal/querynode/plan.go
+10
-10
internal/querynode/plan_test.go
internal/querynode/plan_test.go
+1
-1
internal/querynode/reduce.go
internal/querynode/reduce.go
+42
-10
internal/querynode/reduce_test.go
internal/querynode/reduce_test.go
+2
-2
internal/querynode/search_collection.go
internal/querynode/search_collection.go
+35
-22
internal/querynode/segment.go
internal/querynode/segment.go
+4
-3
internal/querynode/segment_test.go
internal/querynode/segment_test.go
+2
-2
未找到文件。
internal/core/src/segcore/SegmentInterface.cpp
浏览文件 @
a6f1de03
...
...
@@ -20,7 +20,7 @@ SegmentInternalInterface::FillTargetEntry(const query::Plan* plan, QueryResult&
AssertInfo
(
plan
,
"empty plan"
);
auto
size
=
results
.
result_distances_
.
size
();
Assert
(
results
.
internal_seg_offsets_
.
size
()
==
size
);
Assert
(
results
.
result_offsets_
.
size
()
==
size
);
//
Assert(results.result_offsets_.size() == size);
Assert
(
results
.
row_data_
.
size
()
==
0
);
// std::vector<int64_t> row_ids(size);
...
...
internal/core/src/segcore/reduce_c.cpp
浏览文件 @
a6f1de03
...
...
@@ -234,6 +234,56 @@ ReorganizeQueryResults(CMarshaledHits* c_marshaled_hits,
}
}
CStatus
ReorganizeSingleQueryResult
(
CMarshaledHits
*
c_marshaled_hits
,
CPlaceholderGroup
*
c_placeholder_groups
,
int64_t
num_groups
,
CQueryResult
c_search_result
,
CPlan
c_plan
)
{
try
{
auto
marshaledHits
=
std
::
make_unique
<
MarshaledHits
>
(
num_groups
);
auto
search_result
=
(
SearchResult
*
)
c_search_result
;
auto
topk
=
GetTopK
(
c_plan
);
std
::
vector
<
int64_t
>
num_queries_peer_group
;
for
(
int
i
=
0
;
i
<
num_groups
;
i
++
)
{
auto
num_queries
=
GetNumOfQueries
(
c_placeholder_groups
[
i
]);
num_queries_peer_group
.
push_back
(
num_queries
);
}
int64_t
fill_hit_offset
=
0
;
for
(
int
i
=
0
;
i
<
num_groups
;
i
++
)
{
MarshaledHitsPeerGroup
&
hits_peer_group
=
(
*
marshaledHits
).
marshaled_hits_
[
i
];
for
(
int
j
=
0
;
j
<
num_queries_peer_group
[
i
];
j
++
)
{
milvus
::
proto
::
milvus
::
Hits
hits
;
for
(
int
k
=
0
;
k
<
topk
;
k
++
,
fill_hit_offset
++
)
{
hits
.
add_scores
(
search_result
->
result_distances_
[
fill_hit_offset
]);
auto
&
row_data
=
search_result
->
row_data_
[
fill_hit_offset
];
hits
.
add_row_data
(
row_data
.
data
(),
row_data
.
size
());
int64_t
result_id
;
memcpy
(
&
result_id
,
row_data
.
data
(),
sizeof
(
int64_t
));
hits
.
add_ids
(
result_id
);
}
auto
blob
=
hits
.
SerializeAsString
();
hits_peer_group
.
hits_
.
push_back
(
blob
);
hits_peer_group
.
blob_length_
.
push_back
(
blob
.
size
());
}
}
auto
status
=
CStatus
();
status
.
error_code
=
Success
;
status
.
error_msg
=
""
;
auto
marshled_res
=
(
CMarshaledHits
)
marshaledHits
.
release
();
*
c_marshaled_hits
=
marshled_res
;
return
status
;
}
catch
(
std
::
exception
&
e
)
{
auto
status
=
CStatus
();
status
.
error_code
=
UnexpectedError
;
status
.
error_msg
=
strdup
(
e
.
what
());
*
c_marshaled_hits
=
nullptr
;
return
status
;
}
}
int64_t
GetHitsBlobSize
(
CMarshaledHits
c_marshaled_hits
)
{
int64_t
total_size
=
0
;
...
...
internal/core/src/segcore/reduce_c.h
浏览文件 @
a6f1de03
...
...
@@ -38,6 +38,13 @@ ReorganizeQueryResults(CMarshaledHits* c_marshaled_hits,
int64_t
num_segments
,
CPlan
c_plan
);
CStatus
ReorganizeSingleQueryResult
(
CMarshaledHits
*
c_marshaled_hits
,
CPlaceholderGroup
*
c_placeholder_groups
,
int64_t
num_groups
,
CQueryResult
c_search_result
,
CPlan
c_plan
);
int64_t
GetHitsBlobSize
(
CMarshaledHits
c_marshaled_hits
);
...
...
internal/querynode/load_service_test.go
浏览文件 @
a6f1de03
...
...
@@ -166,7 +166,7 @@ import (
// Type: milvuspb.PlaceholderType_VectorFloat,
// Values: [][]byte{searchRowByteData},
// }
// placeholderGroup := milvuspb.
PlaceholderGroup
{
// placeholderGroup := milvuspb.
searchRequest
{
// Placeholders: []*milvuspb.PlaceholderValue{&placeholderValue},
// }
// placeGroupByte, err := proto.Marshal(&placeholderGroup)
...
...
@@ -175,7 +175,7 @@ import (
// }
// query := milvuspb.SearchRequest{
// Dsl: dslString,
//
PlaceholderGroup
: placeGroupByte,
//
searchRequest
: placeGroupByte,
// }
// queryByte, err := proto.Marshal(&query)
// if err != nil {
...
...
@@ -489,7 +489,7 @@ import (
// Type: milvuspb.PlaceholderType_VectorBinary,
// Values: [][]byte{searchRowData},
// }
// placeholderGroup := milvuspb.
PlaceholderGroup
{
// placeholderGroup := milvuspb.
searchRequest
{
// Placeholders: []*milvuspb.PlaceholderValue{&placeholderValue},
// }
// placeGroupByte, err := proto.Marshal(&placeholderGroup)
...
...
@@ -498,7 +498,7 @@ import (
// }
// query := milvuspb.SearchRequest{
// Dsl: dslString,
//
PlaceholderGroup
: placeGroupByte,
//
searchRequest
: placeGroupByte,
// }
// queryByte, err := proto.Marshal(&query)
// if err != nil {
...
...
@@ -1186,9 +1186,9 @@ func TestSegmentLoad_Search_Vector(t *testing.T) {
assert
.
NoError
(
t
,
err
)
plan
,
err
:=
createPlan
(
*
collection
,
dslString
)
assert
.
NoError
(
t
,
err
)
holder
,
err
:=
parse
rPlaceholderGroup
(
plan
,
placeHolderGroupBlob
)
holder
,
err
:=
parse
SearchRequest
(
plan
,
placeHolderGroupBlob
)
assert
.
NoError
(
t
,
err
)
placeholderGroups
:=
make
([]
*
PlaceholderGroup
,
0
)
placeholderGroups
:=
make
([]
*
searchRequest
,
0
)
placeholderGroups
=
append
(
placeholderGroups
,
holder
)
// wait for segment building index
...
...
internal/querynode/plan.go
浏览文件 @
a6f1de03
...
...
@@ -49,32 +49,32 @@ func (plan *Plan) delete() {
C
.
DeletePlan
(
plan
.
cPlan
)
}
type
PlaceholderGroup
struct
{
type
searchRequest
struct
{
cPlaceholderGroup
C
.
CPlaceholderGroup
}
func
parse
rPlaceholderGroup
(
plan
*
Plan
,
placeHolderBlob
[]
byte
)
(
*
PlaceholderGroup
,
error
)
{
if
len
(
placeHolder
Blob
)
==
0
{
func
parse
SearchRequest
(
plan
*
Plan
,
searchRequestBlob
[]
byte
)
(
*
searchRequest
,
error
)
{
if
len
(
searchRequest
Blob
)
==
0
{
return
nil
,
errors
.
New
(
"empty search request"
)
}
var
blobPtr
=
unsafe
.
Pointer
(
&
placeHolder
Blob
[
0
])
blobSize
:=
C
.
long
(
len
(
placeHolder
Blob
))
var
blobPtr
=
unsafe
.
Pointer
(
&
searchRequest
Blob
[
0
])
blobSize
:=
C
.
long
(
len
(
searchRequest
Blob
))
var
cPlaceholderGroup
C
.
CPlaceholderGroup
status
:=
C
.
ParsePlaceholderGroup
(
plan
.
cPlan
,
blobPtr
,
blobSize
,
&
cPlaceholderGroup
)
if
err
:=
HandleCStatus
(
&
status
,
"parser
placeholder group
failed"
);
err
!=
nil
{
if
err
:=
HandleCStatus
(
&
status
,
"parser
searchRequest
failed"
);
err
!=
nil
{
return
nil
,
err
}
var
new
PlaceholderGroup
=
&
PlaceholderGroup
{
cPlaceholderGroup
:
cPlaceholderGroup
}
return
new
PlaceholderGroup
,
nil
var
new
SearchRequest
=
&
searchRequest
{
cPlaceholderGroup
:
cPlaceholderGroup
}
return
new
SearchRequest
,
nil
}
func
(
pg
*
PlaceholderGroup
)
getNumOfQuery
()
int64
{
func
(
pg
*
searchRequest
)
getNumOfQuery
()
int64
{
numQueries
:=
C
.
GetNumOfQueries
(
pg
.
cPlaceholderGroup
)
return
int64
(
numQueries
)
}
func
(
pg
*
PlaceholderGroup
)
delete
()
{
func
(
pg
*
searchRequest
)
delete
()
{
C
.
DeletePlaceholderGroup
(
pg
.
cPlaceholderGroup
)
}
internal/querynode/plan_test.go
浏览文件 @
a6f1de03
...
...
@@ -68,7 +68,7 @@ func TestPlan_PlaceholderGroup(t *testing.T) {
placeGroupByte
,
err
:=
proto
.
Marshal
(
&
placeholderGroup
)
assert
.
Nil
(
t
,
err
)
holder
,
err
:=
parse
rPlaceholderGroup
(
plan
,
placeGroupByte
)
holder
,
err
:=
parse
SearchRequest
(
plan
,
placeGroupByte
)
assert
.
NoError
(
t
,
err
)
assert
.
NotNil
(
t
,
holder
)
numQueries
:=
holder
.
getNumOfQuery
()
...
...
internal/querynode/reduce.go
浏览文件 @
a6f1de03
...
...
@@ -10,10 +10,13 @@ package querynode
*/
import
"C"
import
(
"errors"
"fmt"
"strconv"
"sync"
"unsafe"
"
errors
"
"
github.com/zilliztech/milvus-distributed/internal/log
"
)
type
SearchResult
struct
{
...
...
@@ -46,24 +49,31 @@ func reduceSearchResults(searchResults []*SearchResult, numSegments int64, inRed
}
func
fillTargetEntry
(
plan
*
Plan
,
searchResults
[]
*
SearchResult
,
matchedSegments
[]
*
Segment
,
inReduced
[]
bool
)
error
{
for
i
,
value
:=
range
inReduced
{
if
value
{
wg
:=
&
sync
.
WaitGroup
{}
fmt
.
Println
(
inReduced
)
for
i
:=
range
inReduced
{
if
inReduced
[
i
]
{
wg
.
Add
(
1
)
go
func
(
i
int
)
{
err
:=
matchedSegments
[
i
]
.
fillTargetEntry
(
plan
,
searchResults
[
i
])
if
err
!=
nil
{
return
err
log
.
Error
(
err
.
Error
())
}
wg
.
Done
()
}(
i
)
}
}
wg
.
Wait
()
return
nil
}
func
reorganizeQueryResults
(
plan
*
Plan
,
placeholderGroups
[]
*
PlaceholderGroup
,
searchResults
[]
*
SearchResult
,
numSegments
int64
,
inReduced
[]
bool
)
(
*
MarshaledHits
,
error
)
{
func
reorganizeQueryResults
(
plan
*
Plan
,
searchRequests
[]
*
searchRequest
,
searchResults
[]
*
SearchResult
,
numSegments
int64
,
inReduced
[]
bool
)
(
*
MarshaledHits
,
error
)
{
cPlaceholderGroups
:=
make
([]
C
.
CPlaceholderGroup
,
0
)
for
_
,
pg
:=
range
placeholderGroup
s
{
for
_
,
pg
:=
range
searchRequest
s
{
cPlaceholderGroups
=
append
(
cPlaceholderGroups
,
(
*
pg
)
.
cPlaceholderGroup
)
}
var
cPlaceHolderGroupPtr
=
(
*
C
.
CPlaceholderGroup
)(
&
cPlaceholderGroups
[
0
])
var
cNumGroup
=
(
C
.
long
)(
len
(
placeholderGroup
s
))
var
cNumGroup
=
(
C
.
long
)(
len
(
searchRequest
s
))
cSearchResults
:=
make
([]
C
.
CQueryResult
,
0
)
for
_
,
res
:=
range
searchResults
{
...
...
@@ -86,6 +96,28 @@ func reorganizeQueryResults(plan *Plan, placeholderGroups []*PlaceholderGroup, s
return
&
MarshaledHits
{
cMarshaledHits
:
cMarshaledHits
},
nil
}
func
reorganizeSingleQueryResult
(
plan
*
Plan
,
placeholderGroups
[]
*
searchRequest
,
searchResult
*
SearchResult
)
(
*
MarshaledHits
,
error
)
{
cPlaceholderGroups
:=
make
([]
C
.
CPlaceholderGroup
,
0
)
for
_
,
pg
:=
range
placeholderGroups
{
cPlaceholderGroups
=
append
(
cPlaceholderGroups
,
(
*
pg
)
.
cPlaceholderGroup
)
}
var
cPlaceHolderGroupPtr
=
(
*
C
.
CPlaceholderGroup
)(
&
cPlaceholderGroups
[
0
])
var
cNumGroup
=
(
C
.
long
)(
len
(
placeholderGroups
))
cSearchResult
:=
searchResult
.
cQueryResult
var
cMarshaledHits
C
.
CMarshaledHits
status
:=
C
.
ReorganizeSingleQueryResult
(
&
cMarshaledHits
,
cPlaceHolderGroupPtr
,
cNumGroup
,
cSearchResult
,
plan
.
cPlan
)
errorCode
:=
status
.
error_code
if
errorCode
!=
0
{
errorMsg
:=
C
.
GoString
(
status
.
error_msg
)
defer
C
.
free
(
unsafe
.
Pointer
(
status
.
error_msg
))
return
nil
,
errors
.
New
(
"reorganizeQueryResults failed, C runtime error detected, error code = "
+
strconv
.
Itoa
(
int
(
errorCode
))
+
", error msg = "
+
errorMsg
)
}
return
&
MarshaledHits
{
cMarshaledHits
:
cMarshaledHits
},
nil
}
func
(
mh
*
MarshaledHits
)
getHitsBlobSize
()
int64
{
res
:=
C
.
GetHitsBlobSize
(
mh
.
cMarshaledHits
)
return
int64
(
res
)
...
...
internal/querynode/reduce_test.go
浏览文件 @
a6f1de03
...
...
@@ -54,9 +54,9 @@ func TestReduce_AllFunc(t *testing.T) {
plan
,
err
:=
createPlan
(
*
collection
,
dslString
)
assert
.
NoError
(
t
,
err
)
holder
,
err
:=
parse
rPlaceholderGroup
(
plan
,
placeGroupByte
)
holder
,
err
:=
parse
SearchRequest
(
plan
,
placeGroupByte
)
assert
.
NoError
(
t
,
err
)
placeholderGroups
:=
make
([]
*
PlaceholderGroup
,
0
)
placeholderGroups
:=
make
([]
*
searchRequest
,
0
)
placeholderGroups
=
append
(
placeholderGroups
,
holder
)
searchResults
:=
make
([]
*
SearchResult
,
0
)
...
...
internal/querynode/search_collection.go
浏览文件 @
a6f1de03
...
...
@@ -271,13 +271,13 @@ func (s *searchCollection) search(searchMsg *msgstream.SearchMsg) error {
if
err
!=
nil
{
return
err
}
placeHolderGroup
Blob
:=
query
.
PlaceholderGroup
placeholderGroup
,
err
:=
parserPlaceholderGroup
(
plan
,
placeHolderGroup
Blob
)
searchRequest
Blob
:=
query
.
PlaceholderGroup
searchReq
,
err
:=
parseSearchRequest
(
plan
,
searchRequest
Blob
)
if
err
!=
nil
{
return
err
}
placeholderGroups
:=
make
([]
*
PlaceholderGroup
,
0
)
placeholderGroups
=
append
(
placeholderGroups
,
placeholderGroup
)
searchRequests
:=
make
([]
*
searchRequest
,
0
)
searchRequests
=
append
(
searchRequests
,
searchReq
)
searchResults
:=
make
([]
*
SearchResult
,
0
)
matchedSegments
:=
make
([]
*
Segment
,
0
)
...
...
@@ -315,7 +315,7 @@ func (s *searchCollection) search(searchMsg *msgstream.SearchMsg) error {
if
err
!=
nil
{
return
err
}
searchResult
,
err
:=
segment
.
segmentSearch
(
plan
,
placeholderGroup
s
,
[]
Timestamp
{
searchTimestamp
})
searchResult
,
err
:=
segment
.
segmentSearch
(
plan
,
searchRequest
s
,
[]
Timestamp
{
searchTimestamp
})
if
err
!=
nil
{
return
err
...
...
@@ -326,7 +326,7 @@ func (s *searchCollection) search(searchMsg *msgstream.SearchMsg) error {
}
if
len
(
searchResults
)
<=
0
{
for
_
,
group
:=
range
placeholderGroup
s
{
for
_
,
group
:=
range
searchRequest
s
{
nq
:=
group
.
getNumOfQuery
()
nilHits
:=
make
([][]
byte
,
nq
)
hit
:=
&
milvuspb
.
Hits
{}
...
...
@@ -363,32 +363,45 @@ func (s *searchCollection) search(searchMsg *msgstream.SearchMsg) error {
inReduced
:=
make
([]
bool
,
len
(
searchResults
))
numSegment
:=
int64
(
len
(
searchResults
))
err2
:=
reduceSearchResults
(
searchResults
,
numSegment
,
inReduced
)
if
err2
!=
nil
{
return
err2
var
marshaledHits
*
MarshaledHits
=
nil
if
numSegment
==
1
{
inReduced
[
0
]
=
true
err
=
fillTargetEntry
(
plan
,
searchResults
,
matchedSegments
,
inReduced
)
if
err
!=
nil
{
return
err
}
marshaledHits
,
err
=
reorganizeSingleQueryResult
(
plan
,
searchRequests
,
searchResults
[
0
])
if
err
!=
nil
{
return
err
}
}
else
{
err
=
reduceSearchResults
(
searchResults
,
numSegment
,
inReduced
)
if
err
!=
nil
{
return
err
}
err
=
fillTargetEntry
(
plan
,
searchResults
,
matchedSegments
,
inReduced
)
if
err
!=
nil
{
return
err
}
marshaledHits
,
err
:=
reorganizeQueryResults
(
plan
,
placeholderGroup
s
,
searchResults
,
numSegment
,
inReduced
)
marshaledHits
,
err
=
reorganizeQueryResults
(
plan
,
searchRequest
s
,
searchResults
,
numSegment
,
inReduced
)
if
err
!=
nil
{
return
err
}
}
hitsBlob
,
err
:=
marshaledHits
.
getHitsBlob
()
if
err
!=
nil
{
return
err
}
var
offset
int64
=
0
for
index
:=
range
placeholderGroup
s
{
for
index
:=
range
searchRequest
s
{
hitBlobSizePeerQuery
,
err
:=
marshaledHits
.
hitBlobSizeInGroup
(
int64
(
index
))
if
err
!=
nil
{
return
err
}
hits
:=
make
([][]
byte
,
0
)
for
_
,
len
:=
range
hitBlobSizePeerQuery
{
hits
=
append
(
hits
,
hitsBlob
[
offset
:
offset
+
len
])
hits
:=
make
([][]
byte
,
len
(
hitBlobSizePeerQuery
)
)
for
i
,
len
:=
range
hitBlobSizePeerQuery
{
hits
[
i
]
=
hitsBlob
[
offset
:
offset
+
len
]
//test code to checkout marshaled hits
//marshaledHit := hitsBlob[offset:offset+len]
//unMarshaledHit := milvuspb.Hits{}
...
...
@@ -436,7 +449,7 @@ func (s *searchCollection) search(searchMsg *msgstream.SearchMsg) error {
deleteSearchResults
(
searchResults
)
deleteMarshaledHits
(
marshaledHits
)
plan
.
delete
()
placeholderGroup
.
delete
()
searchReq
.
delete
()
return
nil
}
...
...
internal/querynode/segment.go
浏览文件 @
a6f1de03
...
...
@@ -214,7 +214,7 @@ func (s *Segment) getMemSize() int64 {
}
func
(
s
*
Segment
)
segmentSearch
(
plan
*
Plan
,
placeHolderGroups
[]
*
PlaceholderGroup
,
searchRequests
[]
*
searchRequest
,
timestamp
[]
Timestamp
)
(
*
SearchResult
,
error
)
{
/*
CStatus
...
...
@@ -229,14 +229,14 @@ func (s *Segment) segmentSearch(plan *Plan,
return
nil
,
errors
.
New
(
"null seg core pointer"
)
}
cPlaceholderGroups
:=
make
([]
C
.
CPlaceholderGroup
,
0
)
for
_
,
pg
:=
range
placeHolderGroup
s
{
for
_
,
pg
:=
range
searchRequest
s
{
cPlaceholderGroups
=
append
(
cPlaceholderGroups
,
(
*
pg
)
.
cPlaceholderGroup
)
}
var
searchResult
SearchResult
var
cTimestamp
=
(
*
C
.
ulong
)(
&
timestamp
[
0
])
var
cPlaceHolder
=
(
*
C
.
CPlaceholderGroup
)(
&
cPlaceholderGroups
[
0
])
var
cNumGroups
=
C
.
int
(
len
(
placeHolderGroup
s
))
var
cNumGroups
=
C
.
int
(
len
(
searchRequest
s
))
log
.
Debug
(
"do search on segment"
,
zap
.
Int64
(
"segmentID"
,
s
.
segmentID
),
zap
.
Int32
(
"segmentType"
,
int32
(
s
.
segmentType
)))
var
status
=
C
.
Search
(
s
.
segmentPtr
,
plan
.
cPlan
,
cPlaceHolder
,
cTimestamp
,
cNumGroups
,
&
searchResult
.
cQueryResult
)
...
...
@@ -257,6 +257,7 @@ func (s *Segment) fillTargetEntry(plan *Plan,
return
errors
.
New
(
"null seg core pointer"
)
}
log
.
Debug
(
"segment fill target entry, "
,
zap
.
Int64
(
"segment ID = "
,
s
.
segmentID
))
var
status
=
C
.
FillTargetEntry
(
s
.
segmentPtr
,
plan
.
cPlan
,
result
.
cQueryResult
)
errorCode
:=
status
.
error_code
...
...
internal/querynode/segment_test.go
浏览文件 @
a6f1de03
...
...
@@ -355,9 +355,9 @@ func TestSegment_segmentSearch(t *testing.T) {
searchTimestamp
:=
Timestamp
(
1020
)
plan
,
err
:=
createPlan
(
*
collection
,
dslString
)
assert
.
NoError
(
t
,
err
)
holder
,
err
:=
parse
rPlaceholderGroup
(
plan
,
placeHolderGroupBlob
)
holder
,
err
:=
parse
SearchRequest
(
plan
,
placeHolderGroupBlob
)
assert
.
NoError
(
t
,
err
)
placeholderGroups
:=
make
([]
*
PlaceholderGroup
,
0
)
placeholderGroups
:=
make
([]
*
searchRequest
,
0
)
placeholderGroups
=
append
(
placeholderGroups
,
holder
)
searchResults
:=
make
([]
*
SearchResult
,
0
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录