当重建索引时,先建备份索引,然后通过操作替换原索引文件.compass的一个解决方案是
把备份索引replace操作原索引文件,方法是
getSearchEngineIndexManager().replaceIndex(SearchEngineIndexManager,SearchEngineIndexManager)
简单code
indexCompass = compass.clone(
new CompassSettings().setSetting(CompassEnvironment.CONNECTION_SUB_CONTEXT, "gpsindex"));
indexCompass.getSearchEngineIndexManager().deleteIndex();
indexCompass.getSearchEngineIndexManager().createIndex();
indexCompassTemplate = new CompassTemplate(indexCompass);
indexCompass.getSearchEngineIndexManager().clearCache();
compass.getSearchEngineIndexManager().replaceIndex(
indexCompass.getSearchEngineIndexManager(), new SearchEngineIndexManager.ReplaceIndexCallback() {
public void buildIndexIfNeeded() throws SearchEngineException {
for (Iterator it = devices.values().iterator(); it.hasNext();) {
// Here we build the new index (based on indexCompass)
CompassGpsDevice device = (CompassGpsDevice) it.next();
device.index();
}
}
});
indexCompass.getSearchEngineIndexManager().deleteIndex();
indexCompass.close();
indexCompass是创建备份索引,compass是原索引的compass
还有根据DualCompassGps的code
boolean stoppedMirrorCompassOptimizer = false;
boolean stoppedIndexCompassOptimizer = false;
if (mirrorCompass != null && mirrorCompass.getSearchEngineOptimizer().isRunning()) {
mirrorCompass.getSearchEngineOptimizer().stop();
stoppedMirrorCompassOptimizer = true;
}
if (indexCompass.getSearchEngineOptimizer().isRunning()) {
indexCompass.getSearchEngineOptimizer().stop();
stoppedIndexCompassOptimizer = true;
}
indexCompass.getSearchEngineIndexManager().clearCache();
indexCompass.getSearchEngineIndexManager().deleteIndex();
indexCompass.getSearchEngineIndexManager().createIndex();
mirrorCompass.getSearchEngineIndexManager().replaceIndex(
indexCompass.getSearchEngineIndexManager(), new SearchEngineIndexManager.ReplaceIndexCallback() {
public void buildIndexIfNeeded() throws SearchEngineException {
// Here, we build the index (into the index compass)
for (Iterator it = devices.values().iterator(); it.hasNext();) {
CompassGpsDevice device = (CompassGpsDevice) it.next();
device.index();
}
}
});
if (stoppedMirrorCompassOptimizer) {
mirrorCompass.getSearchEngineOptimizer().start();
}
if (stoppedIndexCompassOptimizer) {
indexCompass.getSearchEngineOptimizer().start();
}
indexcompass是备份索引的Compass, mirrorCompass是当前索引的Compass
根据实现这code 在替换(红色code)是会产生异常现象,主要和搜索时的异常
建议删除原索引,然后重命名为原索引
分享到:
相关推荐
2. **实时索引**:Compass支持实时索引,意味着数据的修改无需手动触发索引更新,索引会随着数据的改变自动更新。 3. **GEO空间搜索**:Compass提供了对地理位置数据的搜索支持,可以方便地进行距离查询等地理空间...
2. **索引数据**:使用Hibernate的事件监听器或注解,自动将持久化对象转换为Compass文档,建立索引。这一步确保了数据库中的新数据能够被搜索。 3. **搜索接口**:在Struts2的Action类中,创建一个处理搜索请求的...
### 基于Compass2.2与Spring结合建立索引的实例 #### 一、Compass简介 Compass是一个开源的.NET和Java框架,它为应用程序提供了完整的文本搜索功能。该框架支持多种搜索引擎(如Elasticsearch, Solr等),使得开发...
Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中,尤其对于那些使用ORM(对象关系映射)如Hibernate的应用程序。在本篇讨论中,我们将深入探讨如何利用Compass技术,结合Eclipse开发环境和MySQL...
Compass和Lucene是两个在Java世界中非常重要的搜索引擎框架,它们在处理文本检索和全文索引方面具有强大的功能。这个压缩包包含了一个完整的Compass工程,MySQL的建库SQL脚本,以及相关的学习资料,非常适合想要深入...
2. **自动索引管理**:Compass能自动跟踪对象的变化,并在需要时更新或删除对应的Lucene索引,简化了索引维护。 3. **缓存支持**:Compass提供了缓存机制,可以缓存搜索结果,提高性能。同时,它也支持对搜索索引的...
2. **动态索引更新**:当数据库中的数据发生变化时,Compass能够自动检测并更新对应的索引,确保检索结果的实时性。 3. **多层缓存**:Compass使用了多种缓存机制,包括查询结果缓存、元数据缓存和字段数据缓存,...
2. **配置文件**:如`compass.conf`,可能定义了Compass的配置,如索引位置、连接到的数据源等。 3. **jar包**:项目依赖的各种库,包括Compass、Lucene、SSH框架和其他必需的第三方库。 4. **SQL脚本**:用于初始化...
- Compass相当于Hibernate的SessionFactory,负责创建和管理索引。 - CompassSession类似Hibernate的Session,管理搜索引擎数据,包括检索和索引操作。 - CompassTransaction类似于Hibernate的transaction,处理事务...
在 Compass 中,Annotation 是一种元数据注解方式,它允许开发者在对象模型上直接定义搜索映射,使得对象与索引之间的关系更加清晰,简化了搜索引擎的集成工作。 一、Compass Annotation 概述 Compass Annotation ...
4. **实时索引**:Compass支持实时索引,意味着当数据库中的数据发生变化时,相应的搜索索引会自动更新,保持数据的同步性。 5. **元数据支持**:Compass允许在索引中存储额外的元数据,这在进行复杂查询或实现...
### Compass 使用详解 #### 一、Compass 概述 Compass 是一款开源的 Java 库,用于简化 Lucene 的使用。它通过提供类似于 Hibernate 的对象关系映射(ORM)功能,使得开发者能够更加轻松地将 Java 对象映射到 ...
这通常包括设置Compass的配置文件(如`compass.cfg.xml`),以及定义索引和搜索策略等。具体配置项取决于项目的需求,例如索引存储位置、索引更新频率等。 #### 五、Compass 高级特性 Compass 提供了许多高级特性...
如果没有Compass,我们一般会在每天深夜重建一次索引。相比Compass的做法, 一来反应迟缓,平均延时半天; 二来效率没有Compass高。如果采用完全重建索引,效率就不用说了。如果进行增量索引,就要增加一个字段,...
Compass允许用户直接在界面上操作索引,包括单键索引、复合索引、唯一性索引等,同时提供性能分析以帮助选择最佳索引策略。 5. 数据导入导出:用户可以方便地将数据从CSV或JSON文件导入到MongoDB,或者将数据库内容...
2. **实时索引**:当数据库中的数据发生变化时,Compass能够自动或手动更新相关的索引,保持搜索结果与数据库内容同步。 3. **高级查询API**:Compass提供了一套高级的查询API,包括布尔查询、短语查询、模糊查询、...
2. **配置环境**: 在项目中引入Compass及相关jar包,进行必要的环境配置,如设置搜索索引存储位置、初始化Compass环境等。 3. **实体类标注**: 使用Compass提供的注解如`@Searchable`、`@SearchableId`、`@...
4. **数据索引**:通过调用Compass API将数据添加到索引中。 5. **执行搜索**:利用Compass提供的API执行搜索操作,获取结果集并进行相应的业务逻辑处理。 以上是Compass的基本使用方法和步骤。通过这种方式,...
5. 索引管理:用户可以通过Compass创建、修改和查看索引,以提高查询速度。 6. 数据导入导出:Compass支持数据的导入和导出功能,可以将数据导出为JSON或CSV格式,或者从这些格式导入数据到MongoDB。 关于压缩包中...
4. **索引映射**:在 Compass 中,需要定义索引字段与对象属性之间的映射关系,以便正确地将对象数据转化为 Lucene 索引。这可以通过注解或者 XML 配置完成。 5. **查询与搜索**:完成索引后,可以使用 Compass ...