gpt4 book ai didi

ElasticSearch multi_match 如果字段存在则应用过滤器否则不用担心?

转载 作者:行者123 更新时间:2023-11-29 02:47:14 26 4
gpt4 key购买 nike

所以我们得到了一个 elasticsearch 实例,但是一个工作需要“组合搜索”(一个搜索字段,带有针对特定索引的 types 的复选框)

这很好,我只是将这种搜索应用于我的索引(为简洁起见:/posts):

{
"query": {
"multi_match": {
"query": querystring,
"type":"cross_fields",
"fields":["title","name"]
}
}
}
}

您可能会从这里对 multi_match 的需求中猜到,这些类型中的每一种的模式在某种程度上是不同的。这就是我现在的挑战。

在其中一种类型中,只有一种,有一个字段在其他类型中不存在,它被称为active,它是一个基本的 bool 值 0 或 1。
我们希望为管理搜索目的索引类型中的非事件项目,但我们不希望在搜索时向公众公开此类型中的非事件项目。

据我所知和理解,我想使用过滤器。但是,当我提供一个要求 active 为 1 的过滤器时,我现在只能从该类型获得结果,而没有其他任何结果。因为现在它正在明确寻找具有该字段且等于 1 的项目。

如何做一个条件“如果字段存在,确保它等于 1,否则忽略这个条件”?这甚至可以实现吗?

最佳答案

if field exists, make sure it equals 1, otherwise ignore this condition

我觉得可以这样实现:

{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "active"
}
},
{
"term": {
"active": 1
}
}
]
}
},
{
"missing": {
"field": "active"
}
}
]
}
}
}
}
}

和完整的查询:

{
"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"
}
}
]
}
}
}
}
}

关于ElasticSearch multi_match 如果字段存在则应用过滤器否则不用担心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com