我有2个单独的索引,每个索引包含不同的类型 我希望得到两者的组合记录。
问题是,一种类型具有字段' 电子邮件'另一种类型具有' work_email '。但是我想将它们视为排序目的相同的东西。 这就是为什么我尝试在其中一种类型中使用 index_name 。
以下是映射:
索引1:
"mappings": {
"people": {
"properties": {
"work_email": {
"type": "string",
"index_name": "email",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
索引2:
"mappings": {
"companies": {
"properties": {
"email": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
我希望这可行:
GET /index1,index2/people,companies/_search?
{
"sort": [
{
"email.raw": {
"order": "asc"
}
}
]
}
但是,我得到一个错误,即“人”中没有这样的字段。类型。 我做错了什么,或者有更好的方法来实现我的需求吗?
您可以在此处找到说明问题的娱乐脚本:https://gist.github.com/pmishev/11375297
答案 0 :(得分:0)
映射多字段的方式有问题。查看下面的映射并尝试索引..你应该得到结果
"mappings": {
"people": {
"properties": {
"work_email":{
"type": "multi_field",
"fields": {
"work_email":{
"type": "string",
"index_name": "email"
},
"raw":{
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
我们应该将类型指定为multi_field,并在字段下指定必填字段....
答案 1 :(得分:0)
我最终在我的映射中添加了'copy_to'属性:
"mappings": {
"people": {
"properties": {
"work_email": {
"type": "string",
"copy_to": "email",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
所以现在我可以将这两个字段作为电子邮件来处理。 这并不理想,因为这意味着电子邮件字段实际上已被索引两次,但这是唯一可行的。