我正在寻找一种方法来进行精确的数组匹配,其中项目必须按顺序排列。
示例文档:
{"id": 1, "categories" : ["A", "C","E"]}
{"id": 2, "categories" : ["A", "C"]}
{"id": 3, "categories" : ["C", "A"]}
当我用" A" AND" C",它只会返回第一个和第三个文件
{"id": 1, "categories" : ["A", "C","E"]}
{"id": 2, "categories" : ["A", "C"]}
第三个不应该被退回,因为订单不匹配。
我已经尝试了以下查询,但它仍会返回第三个文档,因为它没有考虑到顺序:
{
"sort": [
{
"modified": {
"order": "desc"
}
}
],
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"term": {
"categories": "A"
}
},
{
"term": {
"categories": "C"
}
}
]
}
}
}
}
}
我有超过50个字段,我想提供这个确切的订单搜索选项,所以我不希望添加额外字段服务作为类别关键字并使用" AC"查询, {" id":1,"类别" :[" c"," d"]," categorieskey" :" cd"}
还有其他方法吗?
答案 0 :(得分:5)
您需要添加categorieskey
字段,因为:
term
过滤器,没什么复杂的)categorieskey
,Elasticsearch也无法知道这些术语的顺序。在_source
上执行搜索/过滤很痛苦,使用了很多资源,搜索速度也不会很快总而言之,继续添加该领域,这是我认为最好的方法。