elasticsearch - 具有多个条件的术语过滤器
elasticsearch - Terms filter with multiple condition
我想在 ES 中一次搜索 2 个或更多条件的多个值。
For Eg, "customer" index has 2 fields userid and order
。我使用下面的查询来搜索匹配这两个字段的结果。
`{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"and": [
{
"terms": {
"userid": [
"1","2"
]
}
},
{
"terms": {
"order": [
"A","B"
]
}
}
]
}
}
}
}`
结果匹配满足所有组合的文档(如1&A, 1&B, 2&A, 2&B
)。但我只需要按发送顺序匹配的结果(如 1&A, 2&B
)。我们可以使用 Terms Filter 或任何其他替代方案来实现吗?
为了实现这一点,您需要将字段 "userid" 和 "order" 放在 嵌套的 字段中。类似于这种映射:
{
"index1" : {
"mappings" : {
"type1" : {
"properties" : {
"iAmNested" : {
"type" : "nested",
"properties" : {
"userid" : {
"type" : "string"
},
"order" : {
"type" : "string"
}
}
}
}
}
}
}
}
然后您将使用嵌套过滤器进行查询,可在此处找到信息:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html
您始终可以使用嵌套的 "and"
s 和 "or"
s:
POST /test_index/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"or": {
"filters": [
{ "and": [
{ "term": { "userid": { "value": "1" } } },
{ "term": { "order": { "value": "A" } } }
]},
{ "and": [
{ "term": { "userid": { "value": "2" } } },
{ "term": { "order": { "value": "B" } } }
]}
]
}
}
}
}
}
我想在 ES 中一次搜索 2 个或更多条件的多个值。
For Eg, "customer" index has 2 fields userid and order
。我使用下面的查询来搜索匹配这两个字段的结果。
`{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"and": [
{
"terms": {
"userid": [
"1","2"
]
}
},
{
"terms": {
"order": [
"A","B"
]
}
}
]
}
}
}
}`
结果匹配满足所有组合的文档(如1&A, 1&B, 2&A, 2&B
)。但我只需要按发送顺序匹配的结果(如 1&A, 2&B
)。我们可以使用 Terms Filter 或任何其他替代方案来实现吗?
为了实现这一点,您需要将字段 "userid" 和 "order" 放在 嵌套的 字段中。类似于这种映射:
{
"index1" : {
"mappings" : {
"type1" : {
"properties" : {
"iAmNested" : {
"type" : "nested",
"properties" : {
"userid" : {
"type" : "string"
},
"order" : {
"type" : "string"
}
}
}
}
}
}
}
}
然后您将使用嵌套过滤器进行查询,可在此处找到信息:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html
您始终可以使用嵌套的 "and"
s 和 "or"
s:
POST /test_index/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"or": {
"filters": [
{ "and": [
{ "term": { "userid": { "value": "1" } } },
{ "term": { "order": { "value": "A" } } }
]},
{ "and": [
{ "term": { "userid": { "value": "2" } } },
{ "term": { "order": { "value": "B" } } }
]}
]
}
}
}
}
}