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