daShangDao_centerBook/es/es_dll.go
2026-02-28 14:27:33 +08:00

266 lines
7.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package es
//
//import (
// "fmt"
// "os"
// "path/filepath"
// "syscall"
// "unicode/utf16"
// "unsafe"
//)
//
//// 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字符串
//}
//
//// InitEsDLL 初始化esDLL
//func InitEsDLL() (*EsDLL, error) {
// // 尝试多个可能的DLL路径
// dllPaths := []string{
// filepath.Join("dll", "es.dll"),
// filepath.Join("es_dll", "es.dll"),
// "es.dll",
// }
//
// var dllPath string
// for _, path := range dllPaths {
// if _, err := os.Stat(path); err == nil {
// dllPath = path
// break
// }
// }
//
// if dllPath == "" {
// return nil, fmt.Errorf("es DLL 不存在,已尝试路径: %v", dllPaths)
// }
//
// 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
// }
//}
//
//// 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
//}
//
//// stringToUTF16Ptr 将Go字符串转换为UTF16指针Windows
//func stringToUTF16Ptr(s string) uintptr {
// if s == "" {
// return 0
// }
// // 添加空终止符
// ws := utf16.Encode([]rune(s + "\x00"))
// return uintptr(unsafe.Pointer(&ws[0]))
//}
//
//// stringToUTF8Ptr 将Go字符串转换为UTF8指针
//func stringToUTF8Ptr(s string) uintptr {
// if s == "" {
// return 0
// }
// bytes := []byte(s)
// // 添加空终止符
// bytes = append(bytes, 0)
// return uintptr(unsafe.Pointer(&bytes[0]))
//}
//
//// strPtr 将Go字符串转换为C字符串指针
//func (m *EsDLL) strPtr(s string) uintptr {
// return stringToUTF8Ptr(s)
//}
//
//// 1. 查询所有索引 - ListAllIndices
//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
//}
//
//// 2. 获取所有索引的详细信息 - GetIndicesInfo
//func (m *EsDLL) GetIndicesInfo() (string, error) {
// proc, err := m.dll.FindProc("GetIndicesInfo")
// if err != nil {
// return "", fmt.Errorf("找不到函数 GetIndicesInfo: %v", err)
// }
// resultPtr, _, _ := proc.Call()
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 3. 获取单个索引的详细信息 - GetIndexDetail
//func (m *EsDLL) GetIndexDetail(indexName string) (string, error) {
// proc, err := m.dll.FindProc("GetIndexDetail")
// if err != nil {
// return "", fmt.Errorf("找不到函数 GetIndexDetail: %v", err)
// }
// resultPtr, _, _ := proc.Call(stringToUTF8Ptr(indexName))
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 4. 创建索引 - CreateIndex
//func (m *EsDLL) CreateIndex(indexName, mapping string) (string, error) {
// proc, err := m.dll.FindProc("CreateIndex")
// if err != nil {
// return "", fmt.Errorf("找不到函数 CreateIndex: %v", err)
// }
// resultPtr, _, _ := proc.Call(
// stringToUTF8Ptr(indexName),
// stringToUTF8Ptr(mapping),
// )
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 5. 删除索引 - DeleteIndex
//func (m *EsDLL) DeleteIndex(indexName string) (string, error) {
// proc, err := m.dll.FindProc("DeleteIndex")
// if err != nil {
// return "", fmt.Errorf("找不到函数 DeleteIndex: %v", err)
// }
// resultPtr, _, _ := proc.Call(stringToUTF8Ptr(indexName))
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 6. 获取索引文档数量 - GetDocumentCount
//func (m *EsDLL) GetDocumentCount(indexName string) (string, error) {
// proc, err := m.dll.FindProc("GetDocumentCount")
// if err != nil {
// return "", fmt.Errorf("找不到函数 GetDocumentCount: %v", err)
// }
// resultPtr, _, _ := proc.Call(stringToUTF8Ptr(indexName))
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 7. 创建文档 - CreateDocument
//func (m *EsDLL) CreateDocument(indexName, id, doc string) (string, error) {
// proc, err := m.dll.FindProc("CreateDocument")
// if err != nil {
// return "", fmt.Errorf("找不到函数 CreateDocument: %v", err)
// }
// resultPtr, _, _ := proc.Call(
// stringToUTF8Ptr(indexName),
// stringToUTF8Ptr(id),
// stringToUTF8Ptr(doc),
// )
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 8. 根据ID获取文档 - GetDocument
//func (m *EsDLL) GetDocument(indexName, id string) (string, error) {
// proc, err := m.dll.FindProc("GetDocument")
// if err != nil {
// return "", fmt.Errorf("找不到函数 GetDocument: %v", err)
// }
// resultPtr, _, _ := proc.Call(
// stringToUTF8Ptr(indexName),
// stringToUTF8Ptr(id),
// )
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 9. 更新文档 - UpdateDocument
//func (m *EsDLL) UpdateDocument(indexName, id, updateData string) (string, error) {
// proc, err := m.dll.FindProc("UpdateDocument")
// if err != nil {
// return "", fmt.Errorf("找不到函数 UpdateDocument: %v", err)
// }
// resultPtr, _, _ := proc.Call(
// stringToUTF8Ptr(indexName),
// stringToUTF8Ptr(id),
// stringToUTF8Ptr(updateData),
// )
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 10. 删除文档 - DeleteDocument
//func (m *EsDLL) DeleteDocument(indexName, id string) (string, error) {
// proc, err := m.dll.FindProc("DeleteDocument")
// if err != nil {
// return "", fmt.Errorf("找不到函数 DeleteDocument: %v", err)
// }
// resultPtr, _, _ := proc.Call(
// stringToUTF8Ptr(indexName),
// stringToUTF8Ptr(id),
// )
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// 11. 搜索文档 - SearchDocuments
//func (m *EsDLL) SearchDocuments(indexName, query string) (string, error) {
// proc, err := m.dll.FindProc("SearchDocuments")
// if err != nil {
// return "", fmt.Errorf("找不到函数 SearchDocuments: %v", err)
// }
// resultPtr, _, _ := proc.Call(
// stringToUTF8Ptr(indexName),
// stringToUTF8Ptr(query),
// )
// result := m.cStr(resultPtr)
// return result, nil
//}
//
//// Close 关闭DLL句柄
//func (m *EsDLL) Close() error {
// if m.dll != nil {
// return m.dll.Release()
// }
// return nil
//}