`
wwty
  • 浏览: 542406 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

关于搜索开发过程中的总结

阅读更多

1、我想索引文件损坏并不是因为文件没有被关闭,而是在更新索引的时候程序中断的,造成了文件的不完整,才会导致索引文件的损坏的问题--针对IndexWriter没有正常关闭的问题,如果是索引数据写入完毕,最后没有关闭,只会导致索引文件被锁,而不会造成数据的损毁,数据的损毁是在写入的过程中程序突然异常而造成了写入数据的不完整而造成的

 

2、3.0确实取消了2元分词,因为对未知词使用2元切分,在召回率上存在一些问题。新的切分算法配合IKQueryParser是能达到很好的搜索效果的,试试看! --ik3.0版本去掉了针对陌生词的二元分词

 

3、在频繁建索引后,一定记得固定时间要优化索引,比如每天的凌晨1点。--刚开始我写的程序是每写入一次就优化一次的,看来应该将优化放置在晚上进行

 

4、构建实时的索引两种策略,一种是按照每隔一段时间建一次,另一种是判断内存,当内存吃到一定程度了,就写入一次。

 

5、用户搜索*中国*,分词器会怎么处理? 看你用的查询分析器了,如果使用IKQueryParser的话,会帮你过滤掉。但如果使用Lucene自带的parser,就可能被解析为通配符了--有道理

 

6、lucene是按照分词切分的结果进行完整匹配查询的, "硬盘驱动器"被切分成“硬盘”“驱动”“驱动器”,但没有“硬" 和 "盘",(那样是单字切分),因此搜索不到,这个是lucene的基础概念,切记。 

 

7、如果你需要顾虑stopword,需要直接应用IKSegmentor,并加入自己stopfilter,构造一个新的Analyzer。你可以看一看lucene自带的standardAnalyzer的源代码,就知道了--当前记下,以后用到了是个思路

 

8、解释一下,IK3.0为啥不对汉字进行stopword过滤。 

1。IK的核心分词类IKSegmentor的功能是最细化的识别所有的词汇,包括敏感词汇。 

2.对未知的姓名,地面,专有名词,采用单字切分,这样有利于搜索。 

3.对任何的汉字切分结果,IK3.0不做任何“无用词”的假设。如:在佛经中出现的梵文可能被单字切分出大量的拟声词。这些都不能被做为“无用词”过滤。

4.IK推荐用户在各种的专有领域建立自己的停止词库,并建立自己的analyzer实例。 

--关于ik的老大的一些解释,有用

 

9、我觉得你这个需求是为杜撰而杜撰的,首先就与中文的特性违背了。每种语言都有它的切分特性,英文是通过空格分隔,而中文的特性我们采用了词库。这就意味着当“硬盘”是一个词语的时候,“硬”与“硬盘”在词义上是毫无关系的。 

分词器只可能尽可能适应于中文的常规语法切分,而不可能你想怎么分就怎么分。 lucene索引的特性也决定了它的最高效率是“完全索引匹配”,当然你可以使用“前缀匹配”,但这个与lucene的倒排索引设计理念是背道而驰的。--解释的大意同6

 

10、不要强制kill建索引的程序,强制kill很有可能导致索引坏掉,每次关闭前必须保证所有的IndexWriter已经正常的关闭。这点我已经体会到了:我想构建一个可以重用的indexwriter,结果强制kill程序,索引文件被锁了

 

11、如果要做读写分离。同步索引数据要按如下步骤进行:a.停止所有建索引的程序。b.IndexWriter.commit() c.优化所有索引 d。最后再coping or rsyncing。

 

12、每个Document最好都分配一个唯一key,这个key可以是数据库里每个唯一键,也可以是多个字段的组合。用于更新和删除索引--多添加一个field,我选择用数据库当中的唯一键

 

13、把需要更新很频繁的索引和更新不频繁的索引分离成两个目录(要有良好、严密的方案)

 

14、Filter
filter 的作用就是限制只查询索引的某个子集,它的作用有点像SQL语句里的where,但又有区别,它不是正规查询的一部分,只是对数据源进行预处理,然后交给查询语句。注意它执行的是预处理,而不是对查询结果进行过滤,所以使用filter的代价是很大的,它可能会使一次查询耗时提高一百倍。

 

15、关键词区分大小写
or AND TO等关键词是区分大小写的,lucene只认大写的,小写的当做普通单词。

 

16、文件锁
在写索引的过程中强行退出将在tmp目录留下一个lock文件,使以后的写操作无法进行,可以将其手工删除

 

17、时间格式
lucene只支持一种时间格式yyMMddHHmmss,所以你传一个yy-MM-dd HH:mm:ss的时间给lucene它是不会当作时间来处理的

 

18、分词的缺失
比如同义词。用户搜 "北京 饭店" 能不能把" 首都 饭店"也列出来呢? 这个分词器无能为力。所以这个问题,解决办法就只能是在分词之前,我们再加一层:同义词返回模块。这个思路很不错,也比较简单,很容易实现。关键是词库的建立。

 

19、消除歧义
例如:我还清晰地记得我们坐在江边聊天的情境。
分出来是: 我 还清 晰 地 记得 我们 坐在 江边 聊天 的 情境。
结果: 清晰 被拆开了。
这个是基于词库的分词算法固有的问题。没有很好的解决方法。有统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。有一种解决方案是正向匹配结果后再逆向匹配一次,然后比较结果,消除歧义。最好加入词汇概率统计功能.有歧义的用概率决定。

 

20、最大匹配的问题
比如搜索“三季度”这个词,词库里同时有 “三季度” 和 “季度”这两个词,分词时按最大正向匹配 则 “三季度” 被分成一个完整的词,按 “季度” 去检索反而搜不出来了。
解决办法:缩短分词粒度,当字数等于或超过该粒度参数,且能成词,该词就被切分出来。

 

21、新词识别
      新词,也就是那些在字典中都没有收录过,但又确实能称为词的那些词。最典型的是人名,人可以很容易理解句子“王军虎去广州了”中,“王军虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。如果把“王军虎”做为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的工程。即使这项工作可以完成,还是会存在问题,例如:在句子“王军虎头虎脑的”中,“王军虎”还能不能算词?
     新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是人们经常使用的词,因此对于搜索引擎来说,分词系统中的新词识别十分重要。目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。

 

22、对不同的 field 使用不同的分词器是一个可以考虑的方法。比如 tag 字段,就应该使用一个最简单的分词器,按空格分词就可以了。问题的关键是搜索的时候如何保证创建索引时和查询语句的分词器一致的问题?需要么?--需要考虑

分享到:
评论
2 楼 fusionyu 2013-11-08  
IndexWriter没有正常关闭,导致索引循环能修复不?怎么避免服务器断点导致索引损坏啊?
1 楼 sun19890214 2012-09-04  
mark下,一些能看懂,一些看不懂

相关推荐

    移动应用开发-大作业-项目总结.doc

    在开发过程中,我们使用 Vue.js 技术,使用前端开发语言 Vue,开发工具 Vs Code,主要 API 网易云 API、豆瓣电影列表 API、豆瓣电影评论 API 和服务器代理 API。开发环境为本地开发环境 Windows10,API 部署环境为 ...

    java学习笔记,JavaWeb开发中常见问题总结

    【Java学习笔记】JavaWeb开发中常见问题总结 在JavaWeb开发中,开发者经常会遇到各种问题,这些问题涵盖从基础语法到高级设计模式的各个方面。以下是一些关键知识点的概述: 1. **Java基础知识**: - **Classpath...

    日常开发的总结

    在日常的软件开发工作中,积累经验并进行总结是提升个人技能和团队效率的关键步骤。"日常开发的总结"这个主题涵盖了广泛的知识点,涉及到编程语言、设计模式、项目管理、版本控制、测试策略等多个方面。以下是对这些...

    QtCreator开发的搜索框

    本篇文章将深入探讨如何在Qt Creator中开发一个搜索框,以及这个过程中的关键知识点。 首先,Qt Creator提供了丰富的UI设计工具,如Qt Designer,可以帮助开发者直观地构建用户界面,包括搜索框。在Qt Designer中,...

    java面试过程中遇到的问题总结

    Java 面试过程中遇到的问题总结 本文总结了 Java 面试中的一些常见问题,涵盖了 Ajax 的原理、优缺点、 DispatchAction 和 Action 的区别等知识点。 Ajax 的原理 Ajax 是一种异步请求技术,通过 XmlHttpRequest ...

    使用C#开发搜索引擎PPT

    总结来说,本PPT将引导你从基础的搜索原理到高级的搜索引擎开发实践,通过C#编程,结合LUCENE.NET和SOLR,构建一个功能完备且高效的搜索解决方案。学习这些内容不仅可以提升你的技术能力,也为解决实际工作中的信息...

    游戏开发技术总结(经典之作)专辑中所有源代码

    本资源“游戏开发技术总结(经典之作)专辑中所有源代码”显然是一个宝贵的资料库,包含了游戏开发过程中的一些核心技术和实践案例。让我们深入探讨一下其中可能涉及的一些关键知识点。 1. **游戏引擎**:游戏开发...

    matlab开发-搜索变量

    在MATLAB开发过程中,搜索变量是一项非常重要的任务,特别是在处理大量数据或复杂代码时。MATLAB提供了一些内置功能,使得用户能够有效地在`.mat`文件中查找和操作变量。本篇将详细介绍如何在MATLAB环境中搜索`.mat`...

    搜索引擎系统学习与开发总结(最好的入门级教材)

    ### 搜索引擎系统学习与开发总结 #### 一、搜索引擎概述 搜索引擎作为互联网时代的核心技术之一,对于信息的检索和组织具有重要意义。自1990年代初以来,搜索引擎经历了从简单索引到复杂算法的发展过程,极大地...

    基于python开发的音乐搜索引擎

    总结来说,基于Python的音乐搜索引擎开发涵盖了网络爬虫、数据分析、机器学习、音频处理、Web开发、数据库管理和服务器部署等多个方面,充分体现了Python在全栈开发中的应用价值。通过不断学习和实践,开发者可以...

    开发自己的搜索引擎 lucene + heritrix

    总结来说,开发一个基于Lucene和Heritrix的搜索引擎是一个涉及多种技术和步骤的复杂过程。理解Lucene和Heritrix的工作原理和使用方法,以及如何将两者结合构建有效的搜索引擎,对于完成这项工作至关重要。同时,针对...

    项目开发总结报告.doc

    本项目开发过程中参考了多项国内外先进研究,包括搜索引擎优化、大数据处理、自然语言处理等相关技术文献。 2. 实际开发结果 2.1 产品 “网上淘宝”是一个集成了搜索、推荐和个性化设置功能的网络资源检索平台,...

    lucene开发WEB搜索引擎

    总结,利用LUCENE.NET开发WEB搜索引擎是一项技术含量高的工作,涉及到数据爬取、文本处理、索引构建、搜索算法等多个环节。通过深入理解和实践,开发者可以构建出高效、灵活的搜索引擎,满足不同场景的需求。

    人工智能搜索算法 包括回溯策略,图搜索策略,无信息图搜索过程

    总结来说,人工智能中的搜索算法,如回溯、图搜索、无信息搜索和启发式搜索,以及产生式系统,都是解决问题的重要工具。它们结合特定问题的特性,利用智能策略有效地在状态空间中探索,找到最优或近似最优的解决方案...

    Android开发丶一个较为完善的搜索界面,包含了热门标签,清除输入框,搜索结果列表等功能

    总结,这个Android开发示例项目展示了如何构建一个功能丰富的搜索界面,包括热门标签、清除输入框和搜索结果列表,这些功能对于提升用户在移动应用中的搜索体验至关重要。开发者可以通过研究和学习这个项目,进一步...

    NX CAM 二次开发方法总结

    以下是我参与东风模具CAM二次开发后的经验和方法总结。 首先,要熟练掌握NX CAM编程的基本步骤: 1. 分析三维实体造型,创建几何组,调整几何视图和程序视图。 2. 关联加工模板,自动创建几何操作。 3. 生成刀具...

    gridView带搜索添加权限功能,利用SQLHelper与存储过程实现

    总结来说,本项目通过结合使用GridView、SQLHelper和存储过程,实现了数据展示、搜索和权限控制功能,为Web应用的数据操作提供了便利和安全性的保障。这种模式在实际开发中非常常见,有助于提升开发效率并保证系统的...

    搜索引擎的开发论文(毕业设计)

    总结来说,这个毕业设计项目展示了搜索引擎开发的核心流程,包括数据采集、预处理、索引构建、查询处理以及结果展示。它综合运用了多种技术,如网络爬虫Heritrix、HTML解析库HTMLParser、关系型数据库MySQL、全文...

    项目开发总结报告.pdf

    本文档是对“High Go”智能购物车系统的开发总结,旨在回顾项目的开发过程,总结经验,评估开发成果,并分享开发过程中的逻辑方法。本项目由西北大学信息科学与技术学院的“High Go”团队在四周内完成,主要面向软件...

Global site tag (gtag.js) - Google Analytics