所以我们得到了一个弹性搜索实例,但是一项工作需要"组合搜索"(单个搜索字段,具有types跨特定索引的复选框)
这很好,我只是将这种搜索应用于我的索引(为了简洁:/ posts):
{
"query": {
"multi_match": {
"query": querystring,
"type":"cross_fields",
"fields":["title","name"]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您可能从这里对multi_match的需求所猜测的那样,每种类型的模式都以这种或那种方式不同.这就是我现在面临的挑战.
在其中一种类型中,只有一种,有一个字段在其他类型中不存在,它被调用active,它是一个基本的布尔0或1.
我们想索引类型中的非活动项目以进行管理搜索,但我们不知道t希望此类型的非活动项目在搜索时向公众公开.
据我所知和理解,我想使用过滤器.但是当我提供一个要求为active1 的过滤器时,我现在只能从该类型获得结果,而不是其他任何东西.因为现在它明确地查找具有该字段且等于1的项目.
如何进行条件"if field exists,确保它等于1,否则忽略这个条件"?这甚至可以实现吗?
And*_*fan 10
如果字段存在,请确保它等于1,否则忽略此条件
我认为它可以像这样实现:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "active"
}
},
{
"term": {
"active": 1
}
}
]
}
},
{
"missing": {
"field": "active"
}
}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和完整的查询:
{
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "whatever",
"type": "cross_fields",
"fields": [
"title",
"name"
]
}
},
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "active"
}
},
{
"term": {
"active": 1
}
}
]
}
},
{
"missing": {
"field": "active"
}
}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |