Grails Elasticsearch插件问题

时间:2016-03-14 01:42:22

标签: grails elasticsearch gorm elasticsearch-plugin

我是Elasticsearch的新手,正在使用复活的grails插件“elasticsearch:0.0.4.6”。

我想通过firstName,surname或username来实现对User的搜索,返回完整的域实例。 我有2个域类:

用户:

class User {

String firstName
String surname

static hasOne = [profile:Profile]
static hasMany = [friends:User]

static mappedBy  = [ friends: 'friends' ]

static searchable = {
    profile component:true
    only = ['firstName', 'surname', 'profile']
}
...

资料:

class Profile {

String username
String status
byte[] photo

static belongsTo = [user:User]

static searchable = true
...
}

我将这些类设为“searchable = true”,然后创建了以下搜索:

def res = User.search("${params.friendSearch}").searchResults

这找到了正确的实例,但是现在当用户将照片添加到他们的个人资料中时,它会成功,但我收到了以下错误的永无止境的循环:

ERROR index.IndexRequestQueue - 失败的批量项:MapperParsingException [无法解析[photo]];嵌套:NumberFor matException [对于输入字符串:照片base64inputstring

我真的不知道发生了什么,但我认为它必须与elasticsearch无法索引照片数据有关。有人可以提供解释吗?

然后我尝试了可搜索的自定义映射选项 -

  • 个人资料索引:'不'
  • all = false
  • excludeFromAll = true

没有任何效果。最后我添加了

  • only = ['username']

它阻止了错误的发生,并允许我根据上面提到的标准找到用户。但是,由于“唯一”限制,这意味着seach返回的User实例的photo属性等于null,但我需要这个值!

我做错了什么?任何人都可以告诉我最好的行动方案或我对Elasticsearch的任何误解吗?感谢

1 个答案:

答案 0 :(得分:1)

我认为您可能必须从可搜索字段中排除字节属性照片,如下所示:

class Profile {

String username
String status
byte[] photo

static belongsTo = [user:User]

static searchable = {
  except = ['photo']
}

这将排除属性照片被编入索引和搜索。因此,将字节格式转换为字符串格式的输出不会失败。

也许你可能需要一个自定义转换器来将字节(字符串)更改为结果中更有用的东西?