使用自定义Id列映射与Searchable插件

时间:2010-07-06 11:53:01

标签: grails plugins searchable

我有一个带有自定义Id映射的Domain类

...
...
String ensemblGeneId
    String ensemblTranscriptId
    String ensemblProteinId
    String proteinSequence
    String topologySequence
    String topologyRatio
    String description
    String geneName

    ..       
    ..                                     
    ..

    static mapping = {
        proteinSequence type:'text'
        topologySequence type:'text'    
        description type:'text' 
        id name:'ensemblProteinId', generator:'assigned'    
    }

我在使用可搜索的插件

时遇到问题

我将以下内容添加到班级

    static searchable = {
    id name:'ensemblProteinId'
    except = ['topologySequence','proteinSequence']

}

数据插入完成后,我收到以下错误

2010-07-06 13:35:08,091 [http-8080-1] ERROR errors.GrailsExceptionResolver  - Id with path [$/Protein/id] for alias [Protein] not found
org.compass.core.engine.SearchEngineException: Id with path [$/Protein/id] for alias [Protein] not found

似乎它仍然试图找到一个名为id的列而不是名为ensemblProteinId的列。

是可搜索的插件,应该使用自定义id列,如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:2)

自定义域ID和可搜索插件似乎存在问题。作为一种解决方法,您可以使用此处记录的罗盘注释来映射该类:

http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+annotations

在这里:

http://www.compass-project.org/docs/2.1.4/reference/html/core-osem.html

所以你的课看起来像:

import org.compass.annotations.*
@Searchable(alias='Test')
...
class Test {
    @SearchableId
    String sampleId

    @SearchableProperty
    String sampleValue

    static mapping = {
        id name:'sampleId', generator: 'assigned'
    }
    ...
}

我还可以通过添加行

来启用config.groovy中的调试
 debug  'grails.app',
        'org.codehaus.groovy.grails.plugins.searchable'

到你的log4j配置块(你可能需要从错误块中删除'org.codehaus.groovy.grails.plugins'行!) 这将让您看到插件正在生成的罗盘映射。

吉姆。