es.dll 使用教程
1.创建DLL工具实例
加载DLL文件~~~~
// EsDLL Elasticsearch工具DLL结构
type esDLL struct {
dll *syscall.DLL
listAllIndices *syscall.Proc // 查询所有索引
getIndicesInfo *syscall.Proc // 获取所有索引的详细信息
getIndexDetail *syscall.Proc // 获取单个索引的详细信息
createIndex *syscall.Proc // 创建索引
deleteIndex *syscall.Proc // 删除索引
getDocumentCount *syscall.Proc // 获取索引文档数量
createDocument *syscall.Proc // 创建文档
getDocument *syscall.Proc // 根据ID获取文档
updateDocument *syscall.Proc // 更新文档
deleteDocument *syscall.Proc // 删除文档
searchDocuments *syscall.Proc // 搜索文档
freeCString *syscall.Proc // 释放C字符串
}
// 初始化esDLL
func InitEsDLL() (*esDLL, error) {
dllPath := filepath.Join("dll", "es.dll")
if _, err := os.Stat(dllPath); os.IsNotExist(err) {
return nil, fmt.Errorf("es DLL 不存在: %s", dllPath)
}
if dll, err := syscall.LoadDLL(dllPath); err != nil {
return nil, fmt.Errorf("加载es DLL 失败: %s", err)
} else {
return &esDLL{
dll: dll,
listAllIndices: dll.MustFindProc("ListAllIndices"),
getIndicesInfo: dll.MustFindProc("GetIndicesInfo"),
getIndexDetail: dll.MustFindProc("GetIndexDetail"),
createIndex: dll.MustFindProc("CreateIndex"),
deleteIndex: dll.MustFindProc("DeleteIndex"),
getDocumentCount: dll.MustFindProc("GetDocumentCount"),
createDocument: dll.MustFindProc("CreateDocument"),
getDocument: dll.MustFindProc("GetDocument"),
updateDocument: dll.MustFindProc("UpdateDocument"),
deleteDocument: dll.MustFindProc("DeleteDocument"),
searchDocuments: dll.MustFindProc("SearchDocuments"),
freeCString: dll.MustFindProc("FreeCString"),
}, nil
}
}
dll, err := InitEsDLL()
获取C字符串
// cStr 获取C字符串
func (m *esDLL) cStr(p uintptr) string {
if p == 0 {
return ""
}
b := []byte{}
for i := uintptr(0); ; i++ {
c := *(*byte)(unsafe.Pointer(p + i))
if c == 0 {
break
}
b = append(b, c)
}
s := string(b)
if m.freeCString != nil {
m.freeCString.Call(p)
}
return s
}
2. 使用dll函数示例
// 查询所有索引
func (m *esDLL) ListAllIndices() (string, error) {
proc, err := m.dll.FindProc("ListAllIndices")
if err != nil {
return "", fmt.Errorf("找不到函数 ListAllIndices: %v", err)
}
resultPtr, _, _ := proc.Call()
result := m.cStr(resultPtr)
return result, nil
}
接口详情
1.查询所有索引--ListAllIndices
请求信息
dll.ListAllIndices()
请求参数
无
响应示例
{
"success": true,
"message": "",
"data": ["index1", "index2", "index3"]
}
2. 获取所有索引的详细信息--GetIndicesInfo
请求信息
dll.GetIndicesInfo()
请求参数
无
响应示例
{
"success": true,
"message": "",
"data": [
{
"index": "index1",
"health": "green",
"status": "open",
"uuid": "abc123",
"pri": "1",
"rep": "1",
"docs.count": "100",
"docs.deleted": "0",
"store.size": "1.2kb",
"pri.store.size": "600b"
}
]
}
3. 获取单个索引的详细信息--GetIndexDetail
请求信息
dll.GetIndexDetail(indexName)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
响应示例
{
"success": true,
"message": "",
"data": {
"index1": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1234567890000",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "abc123",
"version": {
"created": "7080099"
}
}
}
}
}
}
4. 创建索引--CreateIndex
请求信息
dll.CreateIndex(indexName, mapping)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
| mapping |
string |
是 |
索引映射的JSON字符串 |
响应示例
{
"success": true,
"message": "",
"data": {
}
}
5. 删除索引--DeleteIndex
请求信息
dll.DeleteIndex(indexName)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
响应示例
{
"success": true,
"message": ""
}
6. 获取索引文档数量--GetDocumentCount
请求信息
dll.GetDocumentCount(indexName)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
响应示例
{
"success": true,
"message": "",
"data": 100
}
7. 创建文档--CreateDocument
请求信息
dll.CreateDocument(indexName, id, doc)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
| id |
string |
是 |
文档ID |
| doc |
string |
是 |
文档内容的JSON字符串 |
响应示例
{
"success": true,
"message": ""
}
8. 根据ID获取文档--GetDocument
请求信息
dll.GetDocument(indexName, id)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
| id |
string |
是 |
文档ID |
响应示例
{
"success": true,
"message": "",
"data": {
"_id": "1",
"_index": "index1",
"_source": {
"title": "示例文档",
"content": "这是文档内容"
}
}
}
9. 更新文档--UpdateDocument
请求信息
dll.UpdateDocument(indexName, id, updateData)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
| id |
string |
是 |
文档ID |
| updateData |
string |
是 |
更新数据的JSON字符串 |
响应示例
{
"success": true,
"message": ""
}
10. 删除文档--DeleteDocument
请求信息
dll.DeleteDocument(indexName, id)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
| id |
string |
是 |
文档ID |
响应示例
{
"success": true,
"message": ""
}
11. 搜索文档--SearchDocuments
请求信息
dll.SearchDocuments(indexName, query)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| indexName |
string |
是 |
索引名称 |
| query |
string |
是 |
查询条件的JSON字符串 |
query示例
query := map[string]interface{}{
"query": map[string]interface{}{
"term": map[string]interface{}{
fieldName: fieldValue,
},
},
"size": size,
}
响应示例
{
"success": true,
"message": "",
"data": [
{
"_id": "1",
"title": "示例文档",
"content": "这是文档内容"
},
{
"_id": "2",
"title": "另一个文档",
"content": "更多内容"
}
]
}