【发布时间】:2014-02-25 01:07:07
【问题描述】:
我在 Grails 2.2.3 应用程序中使用 Searchable Plugin 0.6.4,但遇到了一个奇怪的错误。错误说:GrailsContextLoader Error initializing the application: No entities listed to be indexed, have you defined your entities correctly?
我只列出了一个要编入索引的类。下面是那个类(简化了一点):
class Incident {
String howReceived
Date timeOfCall
Date timeOfArrival
User reportingOfficer
static searchable = [ except: ['version', 'dateCreated', 'lastUpdated'] ]
static embedded = [ 'witnesses' ]
static hasMany = [ witnesses: Witness ]
static mapping = {
datasource 'police'
table 'incidents'
}
}
这就是我所拥有的,一个简单的映射。下面我还包括了我打开的堆栈跟踪和调试语句。
编辑:由于某种原因,sessionFactory bean 似乎没有在 DefaultHibernateEntitiesLocator 类中找到任何类元数据。所以...
Map allClassMetaData = sessionFactory.getAllClassMetadata();
assert allClassMetaData == null
不知道为什么或这些信息是否有帮助。
调试
searchable.SearchableGrailsPlugin Not found: Searchable
searchable.SearchableGrailsPlugin Trying to load config from 'SearchableConfiguration.class'
searchable.SearchableGrailsPlugin Not found: SearchableConfiguration
searchable.SearchableGrailsPlugin Defining Compass and Compass::GPS beans
searchable.SearchableGrailsPlugin Done defining Compass and Compass::GPS beans
spring.DefaultSearchableCompassFactoryBean Building SearchableCompassFactoryBean with grailsApplication [org.codehaus.groovy.grails.commons.DefaultGrailsApplication@10fdea05] and compassClassMappingXmlBuilder [grails.plugin.searchable.internal.compass.mapping.DefaultSearchableCompassClassMappingXmlBuilder@e0ef6fa]
spring.SearchableCompassFactoryBean Building new Compass
config.EnvironmentSearchableCompassConfigurator Setting Compass connection to [/Users/grantmcconnaughey/.grails/projects/campus-police/searchable-index/development]
config.DefaultGrailsDomainClassMappingSearchableCompassConfigurator Mapping class [com.company.police.Incident] with strategy [searchable class property]
config.DefaultGrailsDomainClassMappingSearchableCompassConfigurator No mapping strategy found for class [com.company.police.Employee]: assuming this class is not searchable
mapping.SearchableGrailsDomainClassCompassMappingUtils Mapping [Incident.howReceived]
mapping.SearchableGrailsDomainClassCompassMappingUtils Mapping [Incident.id]
mapping.SearchableGrailsDomainClassCompassMappingUtils Mapping [Incident.timeOfArrival]
mapping.SearchableGrailsDomainClassCompassMappingUtils Mapping [Incident.timeOfCall]
mapping.DefaultSearchableCompassClassMappingXmlBuilder Building Compass mapping XML for [com.company.police.Incident] from description [CompassClassMapping: mappedClass=[class com.company.police.Incident], mappedClassSuperClass=[null], alias=[Incident], spellCheck=[null], subIndex=[null], root=[true], poly=[false], extend=[null], propertyMappings=[[CompassClassPropertyMapping: type=[property], propertyName=[domestic], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[hateCrime], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[howReceived], attributes=[{}], CompassClassPropertyMapping: type=[id], propertyName=[id], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[occurredFrom], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[occurredTo], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[officerAssaulted], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[officerKilled], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[readyForSignature], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[reportNumber], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[timeOfArrival], attributes=[{}], CompassClassPropertyMapping: type=[property], propertyName=[timeOfCall], attributes=[{}]]]]
mapping.DefaultSearchableCompassClassMappingXmlBuilder Mapping Searchable Property 'com.company.police.Incident.howReceived' with property attributes [name:howReceived] and meta-data [howReceived:[:]]
mapping.DefaultSearchableCompassClassMappingXmlBuilder Mapping Searchable Property 'com.company.police.Incident.timeOfArrival' with property attributes [name:timeOfArrival] and meta-data [timeOfArrival:[:]]
mapping.DefaultSearchableCompassClassMappingXmlBuilder Mapping Searchable Property 'com.company.police.Incident.timeOfCall' with property attributes [name:timeOfCall] and meta-data [timeOfCall:[:]]
mapping.DefaultSearchableCompassClassMappingXmlBuilder com.company.police.Incident xml [<?xml version="1.0"?>
<!DOCTYPE compass-core-mapping PUBLIC
"-//Compass/Compass Core Mapping DTD 2.0//EN"
"http://www.compass-project.org/dtd/compass-core-mapping-2.2.dtd">
<compass-core-mapping>
<class name='com.company.police.Incident' alias='Incident' root='true' poly='false' support-unmarshall='true'>
<id name='id' />
<property name='howReceived'>
<meta-data>howReceived</meta-data>
</property>
<property name='timeOfArrival'>
<meta-data>timeOfArrival</meta-data>
</property>
<property name='timeOfCall'>
<meta-data>timeOfCall</meta-data>
</property>
</class>
</compass-core-mapping>]
mapping.SearchableClassPropertySearchableGrailsDomainClassMappingConfigurator Adding [com.company.police.Incident] mapping to CompassConfiguration
spring.SearchableCompassFactoryBean Done building Compass
domain.DynamicDomainMethodUtils Adding searchable methods to [com.company.police.Incident]
searchable.SearchableGrailsPlugin Started Compass::GPS
compass.CompassGpsUtils Starting Searchable Plugin bulk index
堆栈跟踪
context.GrailsContextLoader Error initializing the application: No entities listed to be indexed, have you defined your entities correctly?
java.lang.IllegalArgumentException: No entities listed to be indexed, have you defined your entities correctly?
at org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor.performIndex(ConcurrentParallelIndexExecutor.java:88)
at org.compass.gps.device.support.parallel.AbstractParallelGpsDevice.index(AbstractParallelGpsDevice.java:119)
at org.compass.gps.impl.DefaultReplaceIndexCallback.buildIndexIfNeeded(DefaultReplaceIndexCallback.java:42)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager$ReplaceIndexOperationCallback.firstStep(DefaultLuceneSearchEngineIndexManager.java:281)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.doOperate(DefaultLuceneSearchEngineIndexManager.java:218)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.doReplaceIndex(DefaultLuceneSearchEngineIndexManager.java:266)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.replaceIndex(DefaultLuceneSearchEngineIndexManager.java:261)
at org.compass.gps.impl.SingleCompassGps.doIndex(SingleCompassGps.java:118)
at org.compass.gps.impl.AbstractCompassGps.index(AbstractCompassGps.java:154)
at org.compass.gps.impl.AbstractCompassGps.index(AbstractCompassGps.java:128)
at grails.plugin.searchable.internal.compass.CompassGpsUtils.index(CompassGpsUtils.java:49)
【问题讨论】:
-
您可能需要检查两件事:1. 'grails clean'(手指交叉 :))和 2. 检查存储索引的文件夹的权限
-
谢谢,@aldrin。我已经完成了几次清洁,但没有运气。我还检查了存储索引的文件夹的权限,它正在写入该文件夹,所以我认为这不是问题。它正在创建一个
gpsindex和一个index文件夹。在这些文件夹中有一个incident文件夹,其中包含文件segments_1和segments.gen。所以看起来权利不是问题。 :( -
如果您可以在某处分享您的应用代码(或有此错误的示例),也许有人可以看看。您的代码没有明显问题,一定是一些设置/配置问题
-
就是这样,我没有任何配置。我只是采用了默认配置。当我运行
grails run-app时发生错误,而不是围绕我编写的任何特定代码。
标签: grails lucene grails-plugin searchable