clucene 读源码记录

2023-11-10 16:48
文章标签 源码 记录 clucene

本文主要是介绍clucene 读源码记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[b]0\ iconv 的使用[/b][url]http://www.gnu.org/software/libc/manual/html_node/iconv-Examples.html#iconv-Examples[/url]
[b]1\ TestUtf8 中的 测试把GBK中的数据转换为unicode,然后索引[/b]
void _Index(CuTest *tc, IndexWriter* ndx,char* file){
char path[CL_MAX_PATH];
TCHAR tlang[20];


strcpy(path,clucene_data_location);
strcat(path,"/utf8text");
CuAssert(tc,_T("Utf8 directory does not exist"),Misc::dir_Exists(path));
strcat(path,"/");
strcat(path,file);
/*strcat(path,"_utf8.txt");*/
strcat(path,"_gbk.txt");

CuAssert(tc,_T("Language file does not exist"),Misc::dir_Exists(path));

STRCPY_AtoT(tlang,file,CL_MAX_PATH);

Document doc;
doc.add(*Field::Keyword(_T("language"),tlang));

jstreams::FileReader* fr = new jstreams::FileReader(path, "GBK");

// StandardAnalyzer analyzer;
// TokenStream* stream = analyzer.tokenStream(NULL, _CLNEW CL_NS(util)::Reader(fr,true));

doc.add(*Field::Text(_T("contents"), _CLNEW CL_NS(util)::Reader(fr,true) ));
ndx->addDocument(&doc);
}

[b]2\ clucene 中util 库代码中的FileInputStream,一个从文件中读出数据填充到缓存中方法[/b]
int32_t FileInputStream::fillBuffer(char* start, int32_t space) {
if (file == 0) return -1;
// read into the buffer
int32_t nwritten = fread(start, 1, space, file);
// check the file stream status
if (ferror(file)) {
error = "Could not read from file '" + filepath + "'.";
fclose(file);
file = 0;
status = Error;
return -1;
}
if (feof(file)) {
fclose(file);
file = 0;
}
return nwritten;
}

3\
有关的

template <class T> template <class char>
void InputStreamBuffer<T>::setSize(int32_t size) {
// store pointer information
int32_t offset = (int32_t)(readPos - start);

// allocate memory in the buffer
if ( start == 0 )
start = (T*)malloc(size*sizeof(T));
else
start = (T*)realloc(start, size*sizeof(T));
this->size = size;

// restore pointer information
readPos = start + offset;
}


[b]4\GBK转UCS-2码,然后索引[/b]
 iconv_t converter = iconv_open("UCS-2-INTERNAL", "GBK");
//iconv_t converter = iconv_open("UCS-2-INTERNAL", "UTF-8");
// iconv_t converter = iconv_open("UCS-2-INTERNAL", "ASCII");

const char *inbuf ="我喜欢你欧阳";
size_t inbytesleft = strlen(inbuf);
wchar_t* start=(wchar_t*)malloc(inbytesleft*sizeof(wchar_t));
memset(start,0,inbytesleft*sizeof(wchar_t));
size_t outbytesleft = sizeof(wchar_t)*inbytesleft;
char *outbuf = (char*)start;
size_t r = iconv(converter, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
iconv_close(converter);
doc.add(*Field::Text(_T("contents"),start));



[b]4\从gb2312转 utf8 ,再从utf8转 ucs-2[/b]
//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,const char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
iconv_t cd;
int rc;
const char **pin = &inbuf;
char **pout = &outbuf;

cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}

iconv_t converter = iconv_open("UCS-2-INTERNAL", "UTF-8");

//gb2312码转为unicode码
char *in_gb2312="我喜欢你欧阳";
size_t tmpleng = strlen(in_gb2312);
// char out[500];

char* out=(char*)malloc(3*tmpleng*sizeof(char));
int rec = g2u(in_gb2312,strlen(in_gb2312),out,3*tmpleng);
const char * inbuf=out;
size_t inbytesleft = strlen(inbuf);
wchar_t* start=(wchar_t*)malloc(inbytesleft*sizeof(wchar_t));
memset(start,0,inbytesleft*sizeof(wchar_t));
size_t outbytesleft = sizeof(wchar_t)*inbytesleft;
char *outbuf = (char*)start;
size_t r = iconv(converter, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
iconv_close(converter);

doc.add(*Field::Text(_T("contents"),start));

这篇关于clucene 读源码记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383985

相关文章

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho