`

Zend Framework 1.10.1 开始使用 Zend_Search_Lucene

 
阅读更多

开始使用 Zend_Search_Lucene

目录

返回目录

介绍 Zend_Search_Lucene

Zend_Search_Lucene 组件的目的是提供一个即可使用的全文搜索解决方案。它不要求任何 PHP 扩展 UTF-8mbstring 或者安装额外的软件,在 Zend_Framework 安装以后立刻能被使用。

Zend_Search_Lucene 是流行开源全文搜索引擎 Apache Lucene 的一个纯 PHP 端口。查看 http://lucene.apache.org 获得更多信息。

为了可以搜索,信息必须被建立索引。Zend_Search_Lucene 和 Java Lucene 使用一个文件概念,称之为 atomic indexing item。

每一个文件是一套字段:<name, value> 一对,name 和 value 是 UTF-8 字符串。文件字段的任何子集可以被标记为 indexed 来包括在建立文字索引的过程中的字段数据。

当建立索引的时候,字段值可以或不必被标记。如果一个字段不被标记,字段值以一个词组保存;否则,当前的分析器被用作标记。

在 Zend_Search_Lucene 包中提供了几个分析器。默认的分析器工作在 ASCII 文字(因为 UTF-8 分析器需要打开 mbstring 扩展)。它是大小写敏感,而且它会忽略数字。如果你需要改变这个行为,可以使用其它的分析器或者创建你自己的分析器。

注意:在索引和搜索的过程中使用分析器

重要提示!搜索语句同样使用当前的分析器标记,所以在索引和搜索过程中必须设置相同的默认分析器。这将保证源文件和搜索文字以同样的方式转化成词组。

字段值可选的被保存在一个索引内。这允许当搜索的时候,原始的字段数据可以从索引中被检索。这个是把搜索结果和原始数据关联起来的唯一方法(在索引优化或者自动优化以后,内部的文件 ID 可能被改变)。

要记住的是,Lucene 索引不是一个数据库。除了备份文件系统目录,它不提供索引备份机制。它不提供事务缓存(transactional)机制,虽然迸发索引更新和迸发更新和读取被支持。在数据检索速度上它比不上数据库。

所以好的主意:

  • 不要把 Lucene 索引当储存器使用,因为它可能戏剧性的降低搜索的命中率(search hit retrieving performance)。只保存独一无二的文件标识符(文件路径,URL,数据库唯一 ID)和在一个索引内的相关数据。比如,标题,注解,目录,语言信息,化身。(注意:一个字段可能被包括在索引过程,但不被储存,或者被储存,但不被索引)。
  • 如果因为某种原因它被破坏,写下功能可能完整的重建一个索引。

在索引中的独立的文件,可能有完全不同的字段组合。不同文件中的同样的字段不必拥有相同的属性。例如,一个字段可以为一个文件被索引,同时被其它文件的索引忽略。存储,标识,或者把字段值当作一个二进制字符串处理,也是如此。

返回目录

Lucene 索引结构

为了全面的使用 Zend_Search_Lucene 的最大功能,你应该了解它的内置索引结构

一个索引以一套文件的形式被保存在一个单独的目录中。

一个索引由数量众多的独立片断组成,这些片断储存有信息,这些信息是关于被索引文件的一个子集。每一个片断有它自己的词组字典,词组字典索引,和文件存储(保存字段值)Zend_Search_Lucene。所有的片断数据保存在 _xxxxx.cfs 文件中,xxxxx 是片断的名字。

一旦一个索引片断文件被创建,它不能被更新。新的文件被加到新的片断中。删除的文件只被以 deleted 标记在一个可选择的 <segmentname>.del 文件中。

文件更新将会以删除和添加这两个独立的操作来完成,虽然它是通过调用 update() API Zend_Search_Lucene API 做到的。这简化了添加新文件,并允许和搜索操作同时更新。

在另外一方面,使用几个片断()增加了搜索时间:

  • 如果词组字典到达了一个饱合点,大多数情况下,那么搜索一个片断 N 次将比搜索 N 个片断的速度要快。
  • 索引优化把两个或者更多的片断合并进一个单独的新片断。一个新的片断被添加到索引片断列表,旧的片断被排除在外。
  • 片断列表更新的过程如同一个原子操作。这样可以同时添加新的文件,进行索引优化,和在索引内搜索。
  • 索引自动优化在每一个新的片断产生以后进行。它把最小的片断合并进大的片断,然后大的片断合并到更大的片断,如果我们有足够的片断来合并的话。

索引自动优化被这三个选项控制:

MaxBufferedDocs(在缓冲内存中文件被写入到一个新的片断之前,要求的文件的最小数量)

MaxMergeDocs(被一个优化操作合并的文件的最多的数量)

MergeFactor(用来决定由自动优化操作合并的片断标记体的频繁程度)。

如果每执行一个脚本我们添加一个文件,那么 MaxBufferedDocs 事实上没有被使用(在脚本执行结束的时候只有一个新片断和一个文件被创建,这时自动优化进程开始)。

返回目录

打开和创建索引

全部的索引操作(例如,创建一个新的索引,给索引添加一个文件,删除一个文件,搜索整个索引)需要一个索引对象。可以使用以下两种方法的任何一个:

例一 Lucene 索引创建

例二 Lucene 索引打开

返回目录

索引

索引由添加一个新文件到一个已经存在或者新的索引完成:

有两种办法来创建一个文件对象。第一个是手动的

例一 手动文件建造

第二种办法是从 HTML 或者微软 Office 2007 文件中载入:

例二 文件载入

如果一个文件以一个被支持的格式载入,它仍然可以通过新的用户定义字段来手动扩展。

索引策略

你应该在你的应用程序的结构设计中定义索引策略。

你可能需要一个随选定制的索引设置(和 OLTP 系统相似的东西)。在这样的系统,你通常为每一用户请求添加一个文件。这样,MaxBufferedDocs 选项将对系统没有影响。在另外一方面,MaxMergeDocs 由于它允许你限制脚本执行时间的最大值,就真的有用了。MergeFactor 应该被设置到一个值,这个值保持平均索引时间(它也受平均自动优化时间影响)和搜索效率(索引优化水平依赖于片断的数量)之间的平衡。

如果你主要是进行批量索引更新,你的设置应该使用一个 MaxBufferedDocs 选项,把它设置到被可用的内存支持的最大值。MaxMergeDocs 和 MergeFactor 不得不设置到尽可能的降低自动优化相关的值。全部的索引拿破仑应该在索引以后进行。

例三 索引优化

在一些配置中,更有效的是,通过组织更新请求到一个队列,和在一个单独的脚本执行中进行几个更新请求来序列化索引更新。这将降低索引过分打开,同时允许利用索引文件缓冲。

返回目录

搜索

搜索通过使用 find() 方法来运行。

例一 搜索全部索引

这个例子展示了两个特殊搜索 hit 属性 -- id 和 score 的用法。

id 是在一个 Lucene 索引内使用的一个内置的文件标识符。它可以被用来执行许多操作,包括从索引删除一个文件。

例二 删除一个已经被索引的文件

或者从索引中检索文件:

注意:内置文件标识符

重要提示!内置的文件标识符可以通过索引优化或者自动优化进程改变,但是它在一个单一的脚本执行过程中它不会改变,除非 addDocument()(可能包括一个自动拿破仑过程)或者 optimize() 方法被调用。

score 字段是一个命中得分。默认的,搜索结果将按照 score 排序(最好的结果首先返回)。

按照特定的字段值来给结果排序也是可以的。查看 Zend_Search_Lucene 文档来获得更多信息。

这个例子也展示了一个能力,访问储存字段的能力(例如,$hit->title)。在第一次访问非 id 或者 score 的 hit 属性的时候,文件存储字段被加载,然后返回相应的字段值。

这引起一个歧义,对于拥有自己 id 或者 score 字段的文件而言;因此,不建议在存储文件内使用这些字段名。尽管如此,仍然可以通过 getDocument() 方法来访问他们:

例四 访问文件内的原始 id 和 score 字段

返回目录

支持的查询

Zend_Search_Lucene 和 Jave Lucene 支持一个强有力的查询语言。它允许搜索单独的词组,短语,词组范围;使用外卡和模糊搜索,使用布尔值操作符来合并查询,诸如此类。

更详细的查询语言资料可以在 Zend_Search_Lucene 组件文档中找到。

下面是一些普通查询类型和策略的例子。

例一 查询一个单独的字

hello

在全部文件字段中搜索 hello 这个单词

注意:默认搜索字段

重要记号!Jave Lucene 默认的只搜索全部的 contents 字段,但是 Zend_Search_Lucene 搜索全部的字段。这个行为可以使用 Zend_Search_Lucene::setDefaultSearchField($fieldName) 方法来改变。

例二 查询多个字

hello dolly

搜索两个单词,两个单词都是可选的,结果必须出现两个单词中的一个。

例三 在一个查询中要求单词

+hello dolly

搜索两个单词,hello 是必须的,dolly 是可选的

例四 在查询的文件中禁止单词

+hello -dolly

搜索两个单词,hello 是必须的,dolly 是禁止的。也就是说,如果文件匹配 hello,但是包含 dolly 这个单词,它不会返回在搜索结果中。

例五 查询短语

"hello dolly"

搜索 hello dolly 这个短语;只有这个短语的文件才会匹配。

例六 在特殊的字段中查询

title:"The Right Way" AND text:go

在标题(title)内搜索 The Right Way 这个短语,和在正文(text)内出现的 word 这个单词。

例七 在特殊字段内搜索同时整个文件

title:"The Right Way" AND go

在标题内搜索 The Right Way 这个短语,同时在文件内任何字段中出现的 word 这个单词。

例八 在特殊字段内和整个文件内搜索(可选择)

title:Do it right

在标题字段内搜索 Do,同时在全部字段内搜索 it 和 right;与之任何一个匹配的文件将返回结果。

例九 使用通配符 ? 查询

te?t

搜索匹配 te?t 模式的单词,? 可以是任何一个字符。

例十 使用通配符 * 查询

test*

搜索匹配 test* 的单词,* 是任何的0或多个字母序列。

例十一 查询一个短语包括的范围

mod_date:[20020101 TO 20030101]

搜索一个短语的范围(包括在内的)

例十二 搜索一个短语之外的范围

title:{Aido to Carmen}

搜索一个短语的范围(排除在外的)

例十三 模糊搜索

roam~

模糊搜索 roam 单词

例十四 布尔搜索

(framework OR library) AND php

布尔搜索

所有的搜索可以通过 Zend_Search_Lucene 的 query construction API 来构建。还有,查询解析和查询构建可以结合:

例十五 合并查询解析和构建

返回目录

搜索结果分页

在之前提到的,搜索结果命中对象使用懒惰装载来储存文件字段。当任何被储存的字段被访问,整个文件将会被装载。

如果你只想对某些文件进行操作,不要检索全部的文件。

分享到:
评论

相关推荐

    flink-1.10.1-bin-scala_2.12.tgz.zip

    标题中的"flink-1.10.1-bin-scala_2.12.tgz.zip"标识了这是一个Apache Flink的特定版本安装包,版本号为1.10.1,且是针对Scala 2.12编译的二进制发行版。Flink是一个开源的流处理和批处理框架,广泛应用于大数据处理...

    flink-1.10.1-bin-scala_2.12.tgz

    《Apache Flink 1.10.1:流处理与批处理框架的深入解析》 Apache Flink 是一个开源的流处理和批处理框架,它以其高性能、低延迟以及对实时数据流处理的强大支持而备受关注。Flink 1.10.1 版本的发布,进一步提升了...

    flink-1.10.1-bin-scala_2.11.tgz

    《Apache Flink 1.10.1:流处理与批处理框架的深入解析》 Apache Flink 是一个开源的流处理和批处理框架,它以其高性能、低延迟以及对实时数据流处理的强大支持而备受关注。Flink 1.10.1 版本是该框架的一个稳定...

    PyVISA-1.10.1_pyvisa_pyvisaSCPI_Pyvisa1.10.1_

    标题"PyVISA-1.10.1_pyvisa_pyvisaSCPI_Pyvisa1.10.1_"暗示了我们讨论的是PyVISA的1.10.1版本,同时提到了与`pyvisa`和`pyvisaSCPI`相关的元素。`pyvisa`是PyVISA的核心库,而`pyvisaSCPI`则是针对基于SCPI...

    [1.10.1]--1_4_02单道批处理系统.srt

    [1.10.1]--1_4_02单道批处理系统.srt

    Affinity_Photo_1.10.1_MAS__HCiSO__xclient.info.dmg.zip

    Affinity Photo 1.10.1 专业级修图软件被视为Photoshop代替品的专业修图软件Affinity Photo,在今年推出时已引起相当关注,更宣布获苹果选为2015年度最佳Mac软作,Affinity Photo 是一款由英国公司 Serif 开发的专业...

    Patch_CubeFW_F0_V1.10.1_20200227.rar STM32F0xx系列官方固件库驱动库板级支持包源代码,直接加入开发环境调用链接编译

    "Patch_CubeFW_F0_V1.10.1_20200227.rar" 是一个针对STM32F0系列的固件库更新补丁,版本号为V1.10.1,发布日期为2020年2月27日。 此补丁包含的主要内容有: 1. **驱动库**:这些库文件提供了对STM32F0硬件接口的...

    FLINK-1.12.0-BIN-SCALA_2.11-el7.parcel

    适用范围CDH (&gt;= 5.2), CDH (),系统版本 el7

    snmp4j-1.10.1.rar_Free!_java snmp_snmp4j 1.10_snmp4j 1.10.1

    《SNMP4J 1.10.1:开源Java SNMP客户端开发库详解》 SNMP(简单网络管理协议)是一种广泛应用于网络设备管理的协议,它允许远程监控和配置网络设备。对于Java开发者而言,SNMP4J是一个非常重要的工具,它是一个免费...

    flink-1.10.0-bin-scala_2.11.tgz

    Apache Flink是一个开源流处理和批处理框架,它在大数据处理领域扮演着重要角色。...解压后,用户可以根据官方文档配置环境,启动单机或集群模式的Flink服务,从而开始探索和使用Flink的强大功能。

    mod_evasive_1.10.1.tar.gz

    2. **解压文件**:使用`tar -zxvf mod_evasive_1.10.1.tar.gz`命令来解压缩文件。 3. **编译与安装**:进入解压后的目录,执行`./configure`配置,然后运行`make`编译,最后使用`sudo make install`安装到Apache的...

    最新版windows consul_1.10.1_windows_amd64.zip

    这个名为"最新版windows consul_1.10.1_windows_amd64.zip"的压缩包文件,显然包含了适用于Windows操作系统的Consul服务的最新版本1.10.1,且是为64位(amd64)架构设计的。让我们深入了解一下Consul的核心功能和在...

    CDH5.16.1 集成Flink1.10.0 parcel文件

    在大数据处理领域,CDH(Cloudera Distribution Including Apache Hadoop)是一款广泛使用的开源大数据平台,它包含了多个组件,如Hadoop、Spark、Hive等。CDH5.16.1是CDH的一个特定版本,它提供了对大数据处理所需...

    TortoiseMerge-1.10.1-zh_CN

    TortoiseMerge-1.10.1-zh_CN

    gdal_csharp_1.10.1_vs2010

    因此,gdal_csharp_1.10.1_vs2010这个版本确保了与该开发工具的兼容性,开发者可以直接在VS2010中进行项目构建和调试,无需担心任何兼容性问题。 为了使用这个库,开发者需要将压缩包中的gdal.dll及相关依赖库添加...

    GDAL-1.10.1_C#专用dll

    标题“GDAL-1.10.1_C#专用dll”和描述中提到的“修改了错误代码,解决了安全透明代码问题,C#专用,Gdal-1.10.1”都涉及到一个核心概念——GDAL库在C#环境中的使用。GDAL,全称Geospatial Data Abstraction Library...

    jQuery1.10.1及1.10.3_API

    《jQuery1.10.1及1.10.3_API》 jQuery是JavaScript库中的一个强大工具,它极大地简化了HTML文档遍历、事件处理、动画制作和Ajax交互等任务。1.10.1和1.10.3是jQuery的一个重要版本,为开发者提供了稳定且高效的API...

    linux64位中文rpm包

    3、rpm -ivh chkfontpath-1.10.1-1.1.x86_64.rpm xorg-x11-xfs-1.0.2-4.x86_64.rpm 4、rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm 5、rpm -ivh fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm

    Hadoop集群部署相关资源

    VMware-workstation-full-15.5.1-15018445.exe MobaXterm_Portable_v20.3.zip apache-flume-1.7.0-...flink-1.10.1-bin-scala_2.12.tgz kafka_2.11-2.3.1.tgz zookeeper-3.4.5.tar.gz apache-hive-2.3.9-bin.tar.gz

Global site tag (gtag.js) - Google Analytics