将开源clucene引擎编译成动态库

2023-11-06

      本章介绍如何将clucene编译成动态库,开发桌面级的全文检索引擎。

      1.准备工具

        编译平台:windows 10

        代码编译工具:vs2010

        CMake版本:cmake-3.17.1-win64-x64

        源代码版本:clucene-core-2.3.3.4

        Zlib版本:zlib-1.2.3.exe

      2.安装zlib

       这里安装zlib只是为了方便,不用再去编译zlib库到引擎源码中,当然也可以自己去编译,安装完成之后,在安装的bin目录     (C:\Program Files (x86)\GnuWin32\bin)会生成只有一个zlib1.dll动态链接库,这个库待会使用。

        

     3.CMake编译项目

      首先解压源代码clucene-core-2.3.3.4.tar,然后解压cmake-3.17.1-win64-x64.zip工具,然后找到bin目录下的cmake-gui.exe工       具,双击执行,如图所示:

     

     然后找到源代码目录,新建一个win32的文件夹,主要是用于存放CMake生成的vs项目工程文件,

      

      在生成之前,首先需要在vs的库中添加一个头文件,因为源代码中引用的这个头文件,该头文件为linux中使用的,windows中没有,新建一个文件头,名称为:unistd.h内容为:

      

      然后将该文件放到对应版本的vs安装目录的include中,如图所示:

       

     然后在CMake工具中配置源代码路径信息,如图:

     

      然后在点击config,选择生成的目标编译工具。

      

      然后点击完成,开始配置,需要等几分钟,如图:

      

      然后我们点击generate,生成项目文件,生成之后找到我们创建的win32目录下就看到我们对应的vs项目文件了,如图:

       

       然后就可以用vs进行打开,但是这个项目代码的路径是不能移动的,CMake是根据绝对路径去生成的,移动之后,vs就找不到相应的路径。这可能是CMake的一个BUG。

      4.修改项目BUG

       修改项目中的BUG,找到demo项目,然后打开,如图:

        

        

        然后依次编译clucene-shared、clucene-core、cl_demo项目,在编译cl_demo项目之前,修改修改一下源代码,不然检索的时候不能定位文件。

        

        改完之后,然后开始编译,然后运行demo项目,在运行demo项目会报错,因为找不到zlib1.dll,找到之前我们安装的zlib的bin目录,然后将zlib1.dll拷贝到生成目录,如图:

        
      然后再次运行demo项目,如图:

      

      

      第一次是让我们输入将要被建立索引的原始内容所在的目录,这个目录我放了三个文本文件,如图:

      

       

     Demo项目会读取这三个文件的内容然后建立索引。

     第二次输入为建立索引的目录,demo会自动创建索引,如图:

      

      然后我们可以开始搜索测试

      

      可以看到根据我们搜索的内容然后查找到对应的文件。

      编译动态库到此讲解完毕,下一节我们讲解如何编译静态库,编译静态库需要修改项目配置,也可能是项目上遗留的BUG。Z转载请注明原文地址,编写博客不容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将开源clucene引擎编译成动态库 的相关文章

  • 在 Lucene 中正确索引纬度和经度值

    我正在使用 Lucene API 开发 给定半径内基于 美国的最近城市搜索 功能 我在 Lucene 中索引城市的纬度和经度值 如下所示 doc Add new Field latitude paddedLatitude Field Sto
  • “你的意思?” Lucene.net 中的功能

    有人可以告诉我如何在 Lucene net 中实现 您是说 功能吗 Thanks 你应该调查一下拼写检查器 https svn apache org repos asf lucene lucene net trunk C 23 contri
  • Hibernate 搜索中的重复过滤器

    我知道Lucene中有一个内置的DuplicateFilter 可以对Lucene的结果进行重复数据删除 对于用户在重复率非常高的文档数据库上进行搜索来说 这是一个非常重要的功能 由于我正在使用 Hibernate Search 进行全文索
  • 如何在 Elasticsearch 中或在 Lucene 级别进行联接

    在 Elasticsearch 中执行相当于 SQL 连接的最佳方法是什么 我有一个包含两个大表的 SQL 设置 Persons 和 Items 一个人可以拥有many项目 人员和项目行都可以更改 即更新 我必须运行根据人和物品的各个方面进
  • Elasticsearch - 如果术语出现频率越高,得分越高

    我有 2 个文档 正在搜索关键字 Twitter 假设两个文档都是带有 标签 字段的博客文章 文档 A 在 标签 字段中只有 1 个术语 它是 Twitter 文档 B 在 标签 字段中有 100 个术语 但其中 3 个是 Twitter
  • 在哪里可以找到 Apache Lucene/Solr 的性能基准

    是否有任何针对大型数据集上 Lucene Solr 性能基准的链接 资源 500GB 5TB以上范围的数据集 Thanks Lucene 提交者 Mike McCandless 运行基准 http people apache org mik
  • ElasticSearch 全文搜索

    我尝试在elasticsearch java api 中使用正则表达式运行全文搜索 我的过滤器是这样的 FilterBuilder qFilter FilterBuilders regexpFilter all text 但它只匹配一个单词
  • Lucene 中跨多个字段的重复值的影响

    在 lucene 索引中的多个字段中重新索引相同的值会产生什么影响 这个想法是 某人的名字是他们的名字和一般详细信息的一部分 所以我想将该值索引到多个字段中 Ted Bloggs 我可能会索引如下 Field Value firstName
  • IntPoint 没有索引整数值

    当我们尝试使用字段类型 IntPoint 对整数值进行索引时 这些值似乎没有正确传输到我们的 Lucene 索引中 我们正在使用 Lucene 6 0 根据 Lucene 文档的代码片段 doc add new IntPoint LENGT
  • Elasticsearch 6.2 / Kibana查询:一字段必须存在,一字段不能存在

    我的愿望是搜索 field 存在且 fields b 不存在的文档 有没有办法使用 Kibana 中的 Lucene 查询语法 Kibana 的 发现 部分中的 搜索 字段 来执行此操作 我尝试过使用 缺失 字段 b没有成功 exists
  • Java、Lucene:在Java中设置IndexWriter的锁定超时。

    我正在致力于将 Lucene 与我们基于 Spring MVC 的应用程序集成 目前我们已经可以使用它了 但是我们很少得到cannot obtain lock错误 之后我必须手动删除锁定文件才能正常工作 如何在 Java 中设置锁定索引的超
  • lucene:如何添加不重复的文档

    就我而言 插入 lucene 索引的每个文档都有其唯一的 ID 当向lucene索引添加新文档时 如果该文档已经存在于索引中 则不应将该文档插入到索引中 如何实施这一战略 我想我应该先用docId搜索文档 如果lucene找不到该文档 那么
  • 使用 Lucene 进行精确短语搜索?

    我正在使用 SpanTerm Query 在 lucene 中搜索确切的短语 但这似乎不起作用 这是我的代码 Indexing IndexWriter writer new IndexWriter dir new StandardAnaly
  • Lucene 的 StopFilter 中使用的默认停用词列表是什么?

    Lucene 有一个默认的 stopfilter http lucene apache org core 4 0 0 analyzers common org apache lucene analysis core StopFilter h
  • Solr 中的多值字段排序

    我有一个 Solr 索引 将每个产品的价格存储在多值字段中 我需要按价格对结果集进行排序 其中价格从低到高 从高到低 我尝试对价格进行排序 它显示错误您无法对 multivalued True 字段进行排序 下面是我的 solr XML
  • 随着索引和文档数量恒定,elasticsearch 批量索引会随着时间的推移而变慢

    我遇到了使用 NET NEST 客户端和 ElasticSearch 进行批量索引的性能随着时间的推移 索引数量和文档数量恒定而降低的情况 我们正在奔跑ElasticSearch Version 0 19 11 JVM 23 5 b02在具
  • Solr 过滤查询 - 字符串与整数

    假设我正在尝试查询一堆具有类别的文档 并且我想将查询限制为指定的类别 据我所知 这只是使用 fq 参数 过滤器查询 我想知道将参数设置为整 数而不是字符串或数据通常的情况是否会提高性能 我只是会在右侧犯错 但我想我应该仔细检查一下 以防万一
  • cursorMark是无状态的以及它如何解决深度分页

    作为指定here https cwiki apache org confluence display solr Pagination of Results光标标记是无状态的 但我不明白它是如何解决无状态的深度分页问题的 solr 是否按唯一
  • 在 Solr 中实现术语关联挖掘的最简单方法是什么?

    关联挖矿似乎为检索提供了良好的结果相关术语在文本语料库中 有很多关于这个主题的著作 其中包括著名的LSA http en wikipedia org wiki Latent semantic analysis方法 挖掘关联最直接的方法是构建
  • 在elasticsearch中转义特殊字符

    我正在使用Elasticsearch python 客户端 https elasticsearch py readthedocs io en master 对我们托管的 elasticsearch 实例进行一些查询 我注意到一些字符需要转义

随机推荐

  • 文件读写的理论

    为了提高效率 稍微复杂一些的操作系统对文件的读写都是带缓冲的 Linux当然也不例外 所谓缓冲 就是操作系统为最近刚读写的文件内容在内核保留一份副本 以便当再次需要已经缓冲存储在副本中的内容时就不必再临时从设备上读入 而需要写的时候则可以先
  • Jmeter-使用http proxy代理录制脚本

    Jmeter 使用http proxy代理录制脚本 第1步 打卡jmeter工具新增1个线程组 第2步 给线程组添加1个HTTP请求默认值 第3步 设置下HTTP请求默认值第4步 在工作台中新增1个 HTTP代理服务器 第5步 设置HTTP
  • c语言中weak用法,c语言中weak的作用

    c语言中weak的作用 转载参考至 https blog csdn net q251900 在u boot源码中看到 weak关键字 在移植过程中遇到了问题 用例 weak在不同的环境中用法不同 在stm32源码中也比较常见 在u boot
  • BeanCreationException: Error creating bean with name ‘org.springframework.web.servlet.mvc.method.ann

    BeanCreationException Error creating bean with name org springframework web servlet mvc method annotation ExceptionHandl
  • 测试中

    root ubu blockchain2 ll total 44 drwx 5 root root 4096 Aug 4 09 48 drwxr xr x 23 root root 4096 Jul 26 11 26 rw r r 1 ro
  • MVC模式实现学生信息管理

    MVC全名是Model View Controller 是模型 model 视图 view 控制器 controller 的缩写 一种软件设计典范 用一种业务逻辑 数据 界面显示分离的方法组织代码 将业务逻辑聚集到一个部件里面 在改进和个性
  • Markdown表格-换行、合并单元格

    文章目录 1表格中对其 换行处理 1 1 一般我们都会这样用表格如下 1 2 当然这里也可以通过设置 左对齐 右对齐 1 3 实现表格内容换行 2 合并表格 2 1 合并表格行 2 2 合并表格列 2 3 综合实例 1表格中对其 换行处理
  • MyCat配置文件

    1 MyCat 配置文件简介 Mycat的架构其实很好理解 Mycat是代理 Mycat后面就是物理数据库 和 Web 服务器的 Nginx 类似 对于使用者来说 访问的都是Mycat 不会接触到后端的数据库 我们现在做一个主从 读写分离
  • 区块链改革杭州闭门会议——分享链改机遇,探讨价值联动!

    2018年8月19日14点 区块链改革 链改 闭门会暨链改超级节点 杭州 会议在杭州钱江新城华润大厦隆重召开 大会围绕 分享链改机遇 探讨价值联动 为主题 展开系列讨论 基于各界对区块链赋能实体经济的广泛共识 和区块链赋能实体经济场景的逐步
  • python计算距今时间

    计算距今时间 计算一个 ISO 8601 格式的时间字符串距离今天的天数 import datetime 定义时间字符串 time str 2023 08 03T09 30 29 359 08 00 解析时间字符串为datetime对象 d
  • 关于openldap/bdb的一些配置和维护的问题

    一 配置部份在基本配置完成之后 可以在slapd conf设置一些提高安全和效率的选项 cachesize 5000 checkpoint 1024 5 cachesize是ldap在内存中缓存的记录条数 这个缓存是openldap自己维护
  • GMTC分享——当插件化遇到 Android P

    转自 https blog csdn net xinzhou201 article details 80881604 GMTC分享 当插件化遇到 Android P 手机京东技术团队 2018 06 30 举报 前言 Android P 来
  • 用Python写爬虫就很low?你赞同嘛?

    之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬虫 只是这个爬虫没有采集几个亿数据量的业务场景 之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬
  • 总结flutter玩转之-flutter 调用安卓原生view(使用AndroidView)

    总结flutter玩转之 fluuter 调用安卓原生view 使用AndroidView 1 假设你已经熟悉fluuter 开发熟悉dart 语言 android 原生开发技能 1 在安卓原生项目添加代码 1 创建一个原生view 比如说
  • 什么是MIPI接口

    什么是MIPI接口 摘要 随着客户要求手机摄像头像素越来越高同时要求高的传输速度传统的并口传输越来越受到挑战 提高并口传输的输出时钟是一个办法但会导致系统的EMC设计变得越来困难增加传输 手机摄像头MIPI技术介绍 随着客户要求手机摄像头像
  • Postgresql一行变多行unnest与string_to_array,多行变一行string_agg

    Postgresql一行变多行unnest与string to array 多行变一行string agg 1 源码 创建表 create table tb id int value varchar 30 插入数据 insert into
  • vscode c++ string报错ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run“.

    尝试用vscode配值c 环境 配通之后可以hello world了 但是cout string类型的变量时总是闪退 看了下调试控制台上报错 ERROR Unable to start debugging Unexpected GDB ou
  • BI开发步骤

    BI开发如何快速接入 在数据中台项目中 我们会频繁接触BI工具并需要进行开发接入 BI工具种类繁多 因此如果能快速学习完成开发 则能大大提升效率 1 BI工具通用的开发步骤 数据源接入 数据集配置 分为常规数据集和SQL数据集 仪表盘配置
  • C语言游戏---小猫钓鱼

    A和B两个同学玩简单的纸牌游戏 每人手里有n张牌 两人轮流出牌并依次排列在桌面上 每次出掉手里的第1张牌 出牌后如果发现桌面上有跟刚才打出的牌的数字相同的牌 则把从相同的那张牌开始的全部牌按次序放在自己手里的牌的末尾 当一个人手中的牌先出完
  • 将开源clucene引擎编译成动态库

    本章介绍如何将clucene编译成动态库 开发桌面级的全文检索引擎 1 准备工具 编译平台 windows 10 代码编译工具 vs2010 CMake版本 cmake 3 17 1 win64 x64 源代码版本 clucene core