七 所有支持
当索引一个对象,xml或一个简单Resource,它们各自的属性将被添加到索引。这些属性稍后将可以被明确地搜索,比如说title:fang.大多数时间用户希望在所有不同的属性上搜索。由于这个原因,默认情况下,支持一个“所有”属性。这个属性其实就是为了匹配搜索引擎的不同属性的化合物。
所有属性提供高级特征,比如说使用所给属性的声明映射。举个例子,如果一个属性用一个特定的分析器标识了,这个分析器将用于将属性加入到所有属性。如果它不被分词,它将无分析添加。如果配置了一个特定的boost值,所有属性的部分,当“hit”时,将导致结果的高排名。
所有属性允许全局配置和每个映射配置。全局配置允许完全失效所有特征(compass.property.all.enabled=false).它可以排斥来自所有属性的别名(compass.property.all.excludeAlias=true),并且可以为所有属性设置长期载体(compass.property.all.termVector=yes)
每个映射配置定义可以以映射级别配置上面的设置(他们覆盖全局设置的),他们包含在一个all标签里,
应该是在不同映射里的第一项,下面是一个osem的例子:
<compass-core-mapping>
<[mapping] alias="test-alias">
<all enable="true" exclude-alias="true" term-vector="yes" omit-morms="yes"/>
<[mapping]>
</compass-core-mapping>
八 子索引散列发
可搜索内容使用Compass不同的映射定义(OSEM/XSEM/RSEM)映射到搜索引擎。Compass提供将搜索内容分割为不同的子索引的能力,在下一张图里显示:
上面图表里的A,B,C和D代表别名,一次代表可搜索内容的映射定义,A1,B2等等,上面提到的可搜索内容的真实实例。图表显示映射可搜索内容到不同子索引的不同选项。
1 常值子索引哈希法
一种匹配别名的简单方式是通过映射所有它的可搜索内容到同一个子索引,定义如何将可搜索内容映射到搜索引擎(OSEM/XSEM/RSEM)已经在各自的映射定义文件完成。下面是定义一个常值映射到子索引的两种方法,第一个是:
<compass-core-mapping>
<[mapping] alias="test-alias" sub-index="test-subindex">
<!-- ... -->
</[mapping]>
</compass-core-mapping>
提到的[mapping]是由别名test-alias代表的将映射它的实例到test-subindex.注意,如果sub-index没有定义,将默认是alias的值。
另一种选项,可能不习惯用于定义常值子索引散列法,但是显示在这里是为了完整性,是通过在映射定义里指定SubIndexHash的常值实现完成的。
<compass-core-mapping>
<[mapping] alias="test-alias">
<sub-index-hash type="org.compass.core.engine.subindex.ConstantSubIndexHash">
<setting name="subIndex" value="test-subindex"/>
</sub-index-hash>
</[mapping]>
</compass-core-mapping>
2 模子索引哈希法(Modulo Sub Index Hashing)
常值子索引哈希法允许将一个别名(与它代表的所有可搜索实例)映射到同一个子索引中。以子索引为模的散列法允许将一个别名分割到多个子索引中。分割是通过用所有可搜索内容id的字符串值散列别名值,然后使用一个特定的大小值来进行模操作来完成的。也允许为产生的子索引值设置一个常值前缀,将在下面的图表里显示:P49
3 自定义子索引哈希法
ConstantSubIndexHash 和 ModuloSubIndexHash实现了Compass的SubIndexHash接口,是Compass自带的。自然地,一个实现SubIndexHash接口的自定义实现能在映射定义里配置。
一个SubIndexHash接口的实现类必须提供两个操作。第一个,getSubIndexes,必须返回子索引哈希实现能产生的所有可能的子索引。第二个,mapSubIndex(String alias,Property[] ids) 使用所提供的别名和id计算所给的子索引。如果子索引哈希实现类也实现了CompassConfigurable接口,不同的设置参数就可以注入。这里是一个用自定义子索引哈希实现映射定义的例子:
<compass-core-mapping>
<[mapping] alias="A">
<sub-index-hash type="eg.MySubIndexHash">
<setting name="param1" value="value1"/>
<setting name="param2" value="value2"/>
</sub-index-hash>
<[mapping]>
</compass-core-mapping>
九 优化器
随着在read_committed部分提到的,每个成功提交的脏事务在各自的子索引里创建另一个片段。所有包含的片段越多,获取操作就会越慢。这就是为什么保持索引优化并且在一个控制的片段数量里是重要的了。我们通过合并小片段到大片段里完成的。
优化过程工作在子索引级别,为每个执行优化。在优化进程中,优化器将为脏操作锁定子索引(只有要求优化时候)。为了体谅其他的脏操作,这将导致在保持一个已优化的索引 和 花费更少的实际在优化过程中 之间的一个权衡 。
Compass伴随着一个默认的优化器实现。默认的优化器将尽力维持不会比所配置的片段的最大数量大(默认为10)。当使用optimize()和optimizer(subIndex)接口是应用,也应与于优化器被定时运行的时候。它也提供特定的支持,接口级别,用提供的片段的最大数量优化。
这里是一个运行最大片段数量为20的默认优化器的配置的例子 ,并且运行在一个间隔为90秒预定方式 (默认为10秒)
<compass name="default">
<connection>
<file path="target/test-index"/>
</connection>
<searchEngine>
<optimizer scheduleInterval="90" schedule="true" maxNumberOfSegments="20" />
</searchEngine>
compass.engine.connection=target/test-index
compass.engine.optimizer.schedule=true
compass.engine.optimizer.schedule.period=90
compass.engine.optimizer.maxNumberOfSegments=20
十 合并
在特定操作执行之后,Lucene将对索引执行不同片段的合并。你执行的合并越少,搜索就越快。你做的合并越多,指定的操作将越慢。Compass将对何时发生合并有一个很好的控制。这极大地依赖于事务隔离级别和所使用的优化器以及他们如何配置。
1 合并政策控制着哪个合并将被作为是发生的确定索引上。Compass允许简单配置两个伴随着Lucene的合并策略,LogByteSize(默认)和LogDoc,也可以配置自定义实现类。配置类型可以使用compss.engin.merge.policy.type来完成并且包含logbytesize,logdoc,或全限定类名MergePolicyProvider的可能值。
LogByteSize可以使用compass.engine.merge.policy.maxMergeMB和compass.engine.merge.policy.minMergeMB进行进一步配置。
2 合并调度
合并调度控制一旦需要一个合并,合并操作时怎么发生的。Lucene伴随着内置的ConcurrentMergeScheduler(在最新创建的线程上执行并发合并)和SerialMergeScheduler(在同一个线程执行合并操作)。Compass扩展Lucene并且提供ExcutorMergeScheduler,可以利用Compass内部的执行器池(或并发或后台运行管理)没有创建新的线程的开销。这是伴随着Compass的默认合并调度。
配置合并调度的类型可以使用compass.engine.merge.scheduler.type来完成,有下列可能值:executor(默认),concurrent(Lucene并发合并调度),和serial(lucene序列合并调度)。他也可以有一个MergeSchedulerProvider实现类的全限定名。
分享到:
相关推荐
### OSEM - Object/Search Engine Mapping #### Searchable Classes 可搜索类是Compass中的核心概念,它们定义了哪些类的对象应该被索引,并提供了元数据描述如何进行索引。 综上所述,Compass不仅是一个简单的...
3. **OSEM (Object Search Engine Mapping)**: OSEM是一种通过XML配置文件将POJOs(Plain Old Java Objects)映射到搜索引擎的技术,它使得对象与搜索引擎之间的交互更加直观和高效。 三、Compass框架的使用流程 ...
- **OSEM**:OSEM (Object Search Engine Mapping) 是Compass提供的一个核心概念,它通过XML配置文件定义了如何将普通的Java对象(POJOs)映射到搜索引擎中。这极大地简化了对象与搜索引擎之间的交互过程。 #### 三...
- `.cpm.xml`:实现Object/Search Engine Mapping,即如何将POJO映射到common metadata。 - `.cfg.xml`:配置Compass的Index存储位置、分词策略等。 #### Compass核心API详解 Compass的核心API设计受到了...
同时,可以利用Spring的`HibernateTemplate`或`JdbcTemplate`来执行数据库操作,而Compass的`SearchEngine`接口则用于执行搜索查询。 总结来说,这个示例项目是一个完整的Java应用框架,展示了如何优雅地集成...
COMPASS是一个强大的搜索引擎框架,它通过OSEM(Object/Search Engine Mapping)技术实现了应用对象的领域模型与搜索引擎之间的映射。相较于其他搜索引擎框架如Hibernate Search,COMPASS在某些方面展现出了更高的...
- **OSEM**:对象搜索引擎映射(Object Search Engine Mapping),通过XML配置文件提供了POJOs(Plain Old Java Objects)到搜索引擎的映射。 #### 三、下载地址 Compass框架及相关jar包可以从官方网站...
3. **对象关系映射 (ORM)**:支持多种 ORM 技术,如 OSEM(Object-Search Engine Mapping)、XSEM(XML-Search Engine Mapping)、RSEM(Relational-Search Engine Mapping),使得开发者能够在不修改现有业务逻辑的...
Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.内容包括compass的jar包及从网上搜集的相关学习资料. 附两个不错的资料地址: ...
Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.Compass包括: * 搜索引擎抽象层(使用Lucene搜索引荐), * OSEM (Object/Search Engine Mapping) ...
1. **Object/Search Engine Mapping (OSEM)**: OSEM是Compass的核心特性,它允许我们将Java对象模型直接映射到搜索引擎,类似于Hibernate的ORM功能。这样,我们可以通过对象来操作搜索引擎中的数据。 2. **配置方式...
Compass is a first class open source Java Search Engine Framework, enabling the power of Search Engine semantics to your application stack decoratively. Built on top of the amazing Lucene Search ...
OSEM(Object Search Engine Mapping)是 Compass 提供的一种配置方式,通过 XML 文件将 Java 对象(POJOs)映射到搜索引擎。这种方式使得开发者可以方便地将业务对象与搜索索引关联起来,实现数据的双向同步。 四...
欢迎使用由 Francky、Pierre 和 Yohann 编写的旧版 D'lul 搜索引擎要使用它,您需要: 从可执行文件 .jar,或从带有源 .java 文件的树结构一个 stop.txt 停用词文件(在 .jar 旁边) 一个 config.ini 文件(在 .jar ...
这些组件可以与Qlik Sense Capability API,Engine API(与Enigma.js或qsocks)一起使用,也可以单独使用。 以下是快速入门指南,有关更多详细信息,请参见 。 如果您认为有任何遗漏,请告诉我。入门要将Sense ...
该项目提供了一个目录,可用于构建Lucene和Google App Engine支持的应用程序。 现场演示: 在运行中查看它()或检查 主要特点: LAE 4.4.x与Lucene 8.2.x,8.3.x,8.4.x,8.5.x兼容 LAE 4.3.x与Lucene 8.1.x...
Using this book as your compass, you can navigate your way through the Google Cloud Platform and turn your ideas into reality. The authors, both Google Developer Experts in Google Cloud Platform, ...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...