如何在弹性搜索中为多个布尔查询生成查询
How can I generate Query in elastic search for multiple boolean queries
我想在使用 spring 框架的 elasticsearch 中动态生成多个布尔运算的查询。
我在elasticsearch中的数据是这样的
{
"masterID" : "<id>"
"processedData": [
{
"string_value": "22",
"key": "a"
},
{
"string_value": "abc",
"key": "s"
},
{
"string_value": "xyz",
"key": "n"
}
]
}
我想为这个布尔运算执行查询 ((n=xyz) && (s=abc))
为了能够查询数组内部对象,您应该将 processedData 映射为嵌套类型,对象数组不会像您预期的那样工作,因为您无法独立于数组中的其他对象查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套数据类型而不是对象数据类型。更改映射后,您可以使用 bool 查询进行嵌套查询,如下所示:
{
"query": {
"nested": {
"path": "processedData",
"query": {
"bool": {
"must": [
{
"match": {
"key": "n"
}
},
{
"match": {
"string_value": "xyz"
}
}
]
}
}
}
}
}
有关更多信息,您可以在此处查看:https://www.elastic.co/guide/en/elasticsearch/reference/master/array.html
我想在使用 spring 框架的 elasticsearch 中动态生成多个布尔运算的查询。
我在elasticsearch中的数据是这样的
{
"masterID" : "<id>"
"processedData": [
{
"string_value": "22",
"key": "a"
},
{
"string_value": "abc",
"key": "s"
},
{
"string_value": "xyz",
"key": "n"
}
]
}
我想为这个布尔运算执行查询 ((n=xyz) && (s=abc))
为了能够查询数组内部对象,您应该将 processedData 映射为嵌套类型,对象数组不会像您预期的那样工作,因为您无法独立于数组中的其他对象查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套数据类型而不是对象数据类型。更改映射后,您可以使用 bool 查询进行嵌套查询,如下所示:
{
"query": {
"nested": {
"path": "processedData",
"query": {
"bool": {
"must": [
{
"match": {
"key": "n"
}
},
{
"match": {
"string_value": "xyz"
}
}
]
}
}
}
}
}
有关更多信息,您可以在此处查看:https://www.elastic.co/guide/en/elasticsearch/reference/master/array.html