`
Rocky_rup
  • 浏览: 145367 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Jackrabbit 索引配置说明

阅读更多

从1.4版本之后,jackrabbit开始支持节点的属性索引配置.换句话说,我们可以通过配置决定哪种类型节点的哪些属性应该建立索引.这样一来,我们就能对索引内容进行优化,使得搜索更为高效.

索引配置文件也是一个XML,默认名字为indexing_configuration.xml.默认情况下,jackrabbit不会有索引配置的存在,因此要想使用它就必须在repository.xml和workspace.xml中,为SearchIndex元素添加一个参数.

示例:

<param name="indexingConfiguration" value="${wsp.home}/indexing_configuration.xml"/>

上例中,value指明了配置文件存在的相对路径,它与workspace.xml位于同一个路径下.

接下来,看看哪些问题可以通过索引配置解决.

问题1 如何只给特定的属性建立索引?

示例:

<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.0.dtd">

<configuration xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <index-rule nodeType="nt:unstructured">

    <property>Text</property>

  </index-rule>

</configuration>

上例中,索引规则定义了nt:unstructured节点类型下,名为Text的属性需要建立索引.这条规则对nt:unstructured子类型也有效.

问题2 如何调整特定类型或属性的查询相关度?

示例:

<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.0.dtd">

<configuration xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <index-rule nodeType="nt:unstructured" boost="2.0">

    <property>Text</property>

  </index-rule>

</configuration>

上例中,指明nt:unstructured类型的节点的激进因子(boost)为2.0,默认值是1.0,当按jcr:score进行降序排序结果集时,boost值越高位置越考前(也可能有例外,关于score的计算方法请见这里).boost值的有效范围是1.0~5.0.

若想在特定属性上指定boost参数也是可以的.

示例:(为了节省空间,下文的示例中将省略一些不必要的内容)

  <index-rule nodeType="nt:unstructured">

    <property boost="3.0">Title</property>

    <property boost="1.5">Text</property>

  </index-rule>

问题3 上面的规则不错,但只能将规则指定给某个类型,有没有比类型更具体的指定方式呢?

借助condition值的定义实现更具体的方式,看下面示例:

  <index-rule nodeType="nt:unstructured"

              boost="2.0"

              condition="@priority = 'high'"> 

    <property>Text</property>

  </index-rule>

priority属性等于high的nt:unstructured节点,它的激进因子设置为2.0,且只有名为Text的属性会被建立索引.

注意,目前针对属性的条件,仅支持等号操作符和字符串类型.

条件也可以不在当前节点上,示例:

<index-rule nodeType="nt:unstructured"

            boost="2.0"

            condition="ancestor::*/@priority = 'high'">

  <property>Text</property>

</index-rule>

<index-rule nodeType="nt:unstructured"

            boost="0.5"

            condition="parent::foo/@priority = 'low'">

  <property>Text</property>

</index-rule>

<index-rule nodeType="nt:unstructured"

            boost="1.5"

            condition="bar/@priority = 'medium'">

  <property>Text</property>

</index-rule>

当有多规则应用于统一个类型时,最先满足条件的那个规则会被应用,其余的将被忽略.
在条件中也是可以指定节点类型的,但类型的匹配必须是精确的(exact),也就是不支持类型的子类.
示例:
  <index-rule nodeType="nt:unstructured"

              boost="2.0"

              condition="element(*, nt:unstructured)/@priority = 'high'">

    <property>Text</property>

  </index-rule>
问题4 有些属性的值(文本)不需要做全文索引,该怎么办?
默认情况下,凡STRING类型的属性以及其它可以抽取文本的属性都是进行全文索引的.
这就意味着,你可以通过类似jcr:contains(., 'foo')的条件查找到含有foo关键的文本所在的位置.
有时,类似省市地区这样的属性,就没有必要做全文索引,那么可以通过下面的方式禁用全文索引:
  <index-rule nodeType="nt:unstructured">

    <property nodeScopeIndex="false">Text</property>

  </index-rule>
问题5 可不可以用正则表达来匹配要索引的属性?
jackrabbit 1.5支持这样的特性,同时要确保使用DTD1.1的版本.
示例:
<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.1.dtd">

<configuration xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <index-rule nodeType="nt:unstructured">

    <property isRegexp="true">.*Text</property>

  </index-rule>

</configuration>
在属性上将useInExcerpt设置为false,可以禁用属性的文本摘要(excerpt)特性,这也是1.5的默认特性.
问题6 很多时候用nt:resource存储文件的内容,但全文查询的时候却只能查到它,而不是它的父节点,怎么办?
<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.0.dtd">

<configuration xmlns:jcr="http://www.jcp.org/jcr/1.0"

               xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <aggregate primaryType="nt:file">

    <include>jcr:content</include>

  </aggregate>

</configuration>

通过配置aggregate元素来解决这个问题.上例中,就指明了nt:filejcr:content子节点的索引会指向nt:file.

当然,还可以限定子节点的类型,并用"*"匹配所有子节点,示例:

<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.0.dtd">

<configuration xmlns:jcr="http://www.jcp.org/jcr/1.0"

               xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <aggregate primaryType="nt:file">

    <include primaryType="nt:resource">*</include>

  </aggregate>

</configuration>

还可以通过深度(相对路径)来匹配多层子节点,示例:

<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.0.dtd">

<configuration xmlns:jcr="http://www.jcp.org/jcr/1.0"

               xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <aggregate primaryType="nt:file">

    <include>*</include>

    <include>*/*</include>

    <include>*/*/*</include>

  </aggregate>

</configuration>
问题7 不同属性的文本值索引的分析算法不同,该怎么办?
<?xml version="1.0"?>

<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.0.dtd">

<configuration xmlns:nt="http://www.jcp.org/jcr/nt/1.0">

  <analyzers> 

        <analyzer class="org.apache.lucene.analysis.KeywordAnalyzer">

            <property>mytext</property>

        </analyzer>

        <analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer">

            <property>mytext2</property>

        </analyzer>

  </analyzers> 

</configuration>

上文的内容均参考至http://wiki.apache.org/jackrabbit/IndexingConfiguration

分享到:
评论

相关推荐

    jackrabbit最全入门教程

    在入门教程中,你将学习如何安装和配置Jackrabbit,以及如何使用Java API(JCR API)进行基本操作,如创建、读取、更新和删除节点。这通常涉及以下步骤: 1. **环境准备**:安装Java运行环境,下载并解压Jackrabbit...

    JackRabbit 学习参考资料总汇

    文档中提到的API演示程序,说明了如何手动配置JackRabbit仓库。以下是一些重要知识点: 1. JackRabbit安装与配置:需要引入一系列的JAR包,这些包包括核心的JackRabbit API库、JackRabbit核心实现、JCR标准接口库、...

    jackrabbit

    ### Jackrabbit 在项目实施中的常见问题与解决方案 #### 一、Jackrabbit简介 Jackrabbit 是一个完全用 Java 编写的 JCR(Java Content Repository)实现,它可以作为一个独立的服务运行,也可以嵌入到更大的应用...

    Jackrabbit入门实例

    为了运行这些实例,确保你已经配置好Eclipse环境,并且安装了Apache Jackrabbit的库。你可以将jackrabbittest文件夹导入Eclipse作为Java项目,然后按照项目中的说明文档运行各个示例。通过实践,你将逐步熟悉...

    Jackrabbit API

    HTML文档通常会提供详细的API参考,包括类、接口、方法和属性的说明,以及示例代码,帮助开发者更好地理解和使用Apache Jackrabbit。通过阅读这些文档,开发者可以学习如何初始化Repository,创建和管理Session,...

    jackrabbit教程

    此外,了解如何配置存储库(如在示例中手动配置)、集成日志系统(如 log4j)以及处理不同数据类型(例如 `Value` 和 `StringValue`)也很重要。 Jackrabbit 还支持其他高级功能,如事件监听、安全性管理和内容同步...

    jackrabbit-standalone-1.5.6.jar jackrabbit 开发包

    jackrabbit 1.5.6 jar

    jackrabbit-standalone

    jackrabbit-standalone-1.6.5.jar是webDav的支持jar包。

    查看jackrabbit仓库的小工具

    标题中的“查看jackrabbit仓库的小工具”指的是一个用于观察和管理Apache Jackrabbit仓库的实用程序。Jackrabbit是Java Content Repository (JCR) API的一个开源实现,它提供了一个内容管理系统(CMS)的基础框架,...

    Apache Jackrabbit入门

    例如,可以使用DefaultRepositoryFactory创建一个默认配置的Repository。 3. 登录与会话:通过Repository的login方法,可以创建一个Session对象,用于执行实际的操作。登录时通常需要提供认证信息,如用户名和密码...

    jackrabbit-webdav-2.1.0.jar

    jackrabbit-webdav-2.1.0.jar 具体用法可以网上查找

    jackrabbit2.6

    Apache Jackrabbit 2.6 是一个开放源代码的、基于Java的内容管理系统(CMS),它实现了JCR(Java Content Repository)规范,提供了一种用于存储、管理和检索非结构化数据的标准接口。Jackrabbit 提供了一个高性能、...

    jackrabbit jar包

    jackrabbit开发用jar包,jackrabbit是基于Lucene的一种站内搜索技术,它用xml文件为他的元数据,自动穿件索引,使用xpath或者xquery的查询方法。

    jackrabbit-webdav-2.7.1.zip

    4. SolrJ:Solr的Java客户端,简化了与Solr服务器的交互,如索引构建和查询操作。 5. Suller:SolrJ的扩展,提供了额外的功能和更好的文档支持,便于开发者集成Solr。 6. 开源软件:开源项目的优点包括透明度、社区...

    jackrabbit内容仓库的实例(两个工程)

    杰克兔(Jackrabbit)是Apache软件基金会的一个开源项目,它是一个完全实现JSR 170(Java Content Repository API,即JCR)规范的内容管理系统(CMS)内核。JCR提供了一种标准的方式来访问和管理半结构化数据,如网页...

    jackrabbit-webdav-2.3.2.src.zip

    杰克兔(Jackrabbit)是Apache软件基金会的一个项目,它是一个完全实现WebDAV协议的Java库。WebDAV是一种基于HTTP协议的协议扩展,用于用户编辑和管理存储在远程服务器上的文档。Jackrabbit提供了对WebDAV协议的...

    jackrabbit-api-1.5.0.jar

    jackrabbit-api-1.5.0.jar

    深入浅出 jackrabbit 1

    配置文件的理解和正确设置是使用 Jackrabbit 的基础,你需要了解如何根据项目需求调整这些配置。 `.project` 和 `.classpath` 文件是 Eclipse 开发环境下的项目配置文件。`.project` 文件包含了项目的元数据,如...

Global site tag (gtag.js) - Google Analytics