Elasticsearch 查询,其中 returns 所有内容或找到的匹配项
Elasticsearch query, which returns either everything or the found hits
我可以将可选参数传递给我的 es-query。如果没有传递参数,es-query 应该简单地 return 不考虑参数过滤器的所有内容。
到目前为止我得到了什么:
{
"query": {
"bool": {
"must": [
{
"terms": {
"person": [
"donald trump",
"bernie sanders"
]
}
},
{
"range": {
"date": {
"gte": "now-7d",
"lte": "now"
}
}
}
],
"should": {
"terms": {
"source_name": [
"nytimes.com"
]
}
}
}
}
}
source_name
字段应该是可选的,这意味着如果我将发布者作为参数传递,那么它应该 return 它发现的任何内容,如果没有传递发布者参数,那么它应该忽略 source_name
简单地 return 一切。
我怎样才能做到这一点?
Elastic search DSL 是声明式语言,因此无法使用 if else 逻辑(控制流)。您不应在创建查询本身时添加子句(如果输入为空)。
或者您可以使用 minimum_should_match。在这两种情况下,您都需要更改用于生成弹性搜索查询的语言
查询:
{
"query": {
"bool": {
"must": [
{
"terms": {
"person": [
"donald trump",
"bernie sanders"
]
}
},
{
"range": {
"date": {
"gte": "now-7d",
"lte": "now"
}
}
}
],
"should": {
"terms": {
"source_name": [
"nytimes.com"
]
}
},
"minumum_should_match":1 --> 0 if input is empty
}
}
}
我可以将可选参数传递给我的 es-query。如果没有传递参数,es-query 应该简单地 return 不考虑参数过滤器的所有内容。
到目前为止我得到了什么:
{
"query": {
"bool": {
"must": [
{
"terms": {
"person": [
"donald trump",
"bernie sanders"
]
}
},
{
"range": {
"date": {
"gte": "now-7d",
"lte": "now"
}
}
}
],
"should": {
"terms": {
"source_name": [
"nytimes.com"
]
}
}
}
}
}
source_name
字段应该是可选的,这意味着如果我将发布者作为参数传递,那么它应该 return 它发现的任何内容,如果没有传递发布者参数,那么它应该忽略 source_name
简单地 return 一切。
我怎样才能做到这一点?
Elastic search DSL 是声明式语言,因此无法使用 if else 逻辑(控制流)。您不应在创建查询本身时添加子句(如果输入为空)。 或者您可以使用 minimum_should_match。在这两种情况下,您都需要更改用于生成弹性搜索查询的语言
查询:
{
"query": {
"bool": {
"must": [
{
"terms": {
"person": [
"donald trump",
"bernie sanders"
]
}
},
{
"range": {
"date": {
"gte": "now-7d",
"lte": "now"
}
}
}
],
"should": {
"terms": {
"source_name": [
"nytimes.com"
]
}
},
"minumum_should_match":1 --> 0 if input is empty
}
}
}