在Elasticsearch中按数组索引对搜索结果进行排序

时间:2014-03-04 18:31:25

标签: arrays elasticsearch

我有这样的记录:

// tags vary in order within array
{
    name : 'Karl',
    tags : [
        'java',
        'html',
        'javascript'
    ]
},
{
    name : 'John',
    tags : [
        'html',
        'java',
        'javascript'
    ]
}

我在标签上运行bool查询:

"query" : {
    "bool" : {
        "must" : [
            {
                "term" : "java"
            }
        ]
    }
}

我希望Karl成为第一个搜索结果,因为'java'在他的标签数组中的索引较低。不幸的是我的查询并不关心索引,总体结果还可以,但结果的顺序似乎是随机的。

如何强制Elasticsearch考虑数组索引?

THX!

1 个答案:

答案 0 :(得分:0)

如果您需要此信息,那么您将必须存储该元素中每个元素的索引:

{
    name : 'Karl',
    tags : [
        'java',
        'html',
        'javascript'
    ],
    index : 0
},
{
    name : 'John',
    tags : [
        'html',
        'java',
        'javascript'
    ],
    index : 1
}

然后你可以对这个索引子字段进行排序:

"query" : {
    "bool" : {
        "must" : [
            {
                "term" : "java"
            }
        ]
    },
    "sort" : [
        "arrayFieldName.index" : "asc"
    ]
}