当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch v2.3.5中的过滤器和多_匹配查询

巫马俊力
2023-03-14

我不熟悉Elasticsearch和Nest,请原谅我的无知。我想在Elasticsearch v2.3.5中使用过滤器和multi\u匹配查询,但到目前为止,我还无法解决这个问题。我想,一旦我把它用于Elasticsearch,我应该能够将它映射到Nest。

以下是我的JSON数据结构:

{
   "contentID":1,
   "categoryID":0,
   "title":"...",
   "description":"...",
   "contentHtml":"...",
   "version":2,
   "parentContentID":0,
   "displayOrder":0,
   "freshdeskID":0,
   "isDraft":false,
   "isCommentingEnabled":false,
   "isArticle":false,
   "grandParentContentID":0,
   "isAnyParentDraft":false
}

下面是我的工作搜索查询(没有任何过滤器):

POST contents/supportitem/_search?pretty=true
{
  "size": 150,
  "highlight": {
    "fields": {
      "contentHtml": {
        "fragment_size": 245
      }
    }
  },
  "_source": {
    "include": [
      "title",
      "contentID",
      "description",
      "thumbnailUrl",
      "isDraft",
      "isAnyParentDraft",
      "grandParentContentID"
    ]
  },"query": {
    "multi_match": {
      "type": "cross_fields",
      "query": "query typed by user",
      "tie_breaker": 0.3,
      "fields": [
        "title^1.1",
        "additionalContents^1.2",
        "contentHtml^1"
      ]
    }
  }
}

我只想在搜索结果中向用户显示这些记录,其中:

grandParentContentID != 0 and
isDraft != false and
isAnyParentDraft != false

我尝试了不同的查询,但我不知道如何写这个。

两个不起作用的查询包括:

POST contents/supportitem/_search?pretty=true
{
  "size": 150,
  "highlight": {
    "fields": {
      "contentHtml": {
        "fragment_size": 245
      }
    }
  },
  "_source": {
    "include": [
      "title",
      "contentID",
      "description",
      "thumbnailUrl",
      "isDraft",
      "isAnyParentDraft",
      "grandParentContentID"
    ]
  },"query": {
    "multi_match": {
      "type": "cross_fields",
      "query": "Tile map server resources",
      "tie_breaker": 0.3,
      "fields": [
        "title^1.1",
        "additionalContents^1.2",
        "contentHtml^1"
      ]
    },"filtered": {
      "filter": {
        "bool": {
          "term": {
            "isAnyParentDraft": "false"
          }
        }
      }
    }
  }
}


POST contents/supportitem/_search?pretty=true
{
  "size": 150,
  "highlight": {
    "fields": {
      "contentHtml": {
        "fragment_size": 245
      }
    }
  },
  "_source": {
    "include": [
      "title",
      "contentID",
      "description",
      "thumbnailUrl",
      "isDraft",
      "isAnyParentDraft",
      "grandParentContentID"
    ]
  },"query": {
    "multi_match": {
      "type": "cross_fields",
      "query": "Tile map server resources",
      "tie_breaker": 0.3,
      "fields": [
        "title^1.1",
        "additionalContents^1.2",
        "contentHtml^1"
      ]
    },"filtered": {
      "query": {
        "bool": {
          "must": [
            {
              "field": {"isAnyParentDraft": "false"}
            }
          ]
        }
      }
    }
  }
}

我得到“无法解析搜索源。需要字段名,但得到了[START\u OBJECT]”

我已经做到了,但我不知道如何添加更多的过滤器:

POST contents/supportitem/_search?pretty=true
{
  "size": 150,
  "highlight": {
    "fields": {
      "contentHtml": {
        "fragment_size": 245
      }
    }
  },
  "_source": {
    "include": [
      "title",
      "contentID",
      "description",
      "thumbnailUrl",
      "isDraft",
      "isAnyParentDraft",
      "grandParentContentID"
    ]
  },
  "query": {
    "filtered": {
      "query": {
        "multi_match": {
          "type": "cross_fields",
          "query": "deleted",
          "tie_breaker": 0.3,
          "fields": [
            "title^1.1",
            "additionalContents^1.2",
            "contentHtml^1"
          ]
        }
      },
      "filter": {
        "and": {
          "filters": [
            {
              "term": {
                "isAnyParentDraft": "false"
              }
            }
          ]
        }
      }
    }
  }
}

我提出以下问题:

带有multi_match和bool的ElasticSearch-只有一个过滤器

Elasticsearch:multi_match过滤器没有效果

共有1个答案

梁丘经艺
2023-03-14

很好的开始,你就快到了:

POST contents/supportitem/_search?pretty=true
{
  "size": 150,
  "highlight": {
    "fields": {
      "contentHtml": {
        "fragment_size": 245
      }
    }
  },
  "_source": {
    "include": [
      "title",
      "contentID",
      "description",
      "thumbnailUrl",
      "isDraft",
      "isAnyParentDraft",
      "grandParentContentID"
    ]
  },
  "query": {
    "bool": {
      "must": {
        "multi_match": {
          "type": "cross_fields",
          "query": "deleted",
          "tie_breaker": 0.3,
          "fields": [
            "title^1.1",
            "additionalContents^1.2",
            "contentHtml^1"
          ]
        }
      },
      "must_not": [
         {
           "term": {
             "isAnyParentDraft": "false"
           }
         },
         {
           "term": {
             "isDraft": "false"
           }
         },
         {
           "term": {
             "grandParentContentID": 0
           }
         }
      ]
    }
  }
}
 类似资料:
  • 我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过:

  • 问题内容: 我在ES中有一个多匹配查询,并希望添加一个过滤器。 添加此过滤器的语法是什么? 我试过了: 问题答案: 根据您的需要,必须将过滤器放置在正确的位置。您有两种选择: 使用顶级过滤器,并将该过滤器仅应用于搜索结果,而不应用于各个方面 使用过滤的查询,并将过滤器应用于搜索结果和构面

  • 如何使此过滤器在同一文本中的多个匹配项上工作? 这是返回链接的函数 使用筛选器的示例文本: Ut[点击这里|节点: 4]enim ad minim veniam,quis[点击这里|术语: 42]nostr的练习ullamco的劳动是新的和其他的结果。Duis ate irure Dolor in re的谴责在流言蜚语velit esse cilum[点击这里|术语: 1]Dolore eu fu

  • 问题内容: 我需要按类别过滤项目列表。我希望用户能够单击一个按钮,然后将过滤器应用于列表。 目前,我已经在一定程度上进行了这项工作。 举例来说,我有一个电影列表,如下所示: 我还有一个电影流派列表(渲染为按钮,单击该按钮将过滤电影列表),如下所示: (“ changeGenre()”函数所做的全部工作就是更新范围,以显示当前正在查看的流派)。 现在这个方法可以正常工作,直到我遇到两种类型的情况:“

  • 问题内容: 我正在使用ORB特征检测器使用以下代码查找两个图像之间的匹配项: 我的问题是我找不到过滤匹配项的方法,因此仅当它们在照片中具有相似位置时才匹配。即使一个关键点在位置上距离很远,我也总是会得到多个匹配。 有没有办法更好地过滤它们? 问题答案: 为了获得更好的匹配结果,您应该以给定的顺序包括这些过滤方法。 在两个方向上执行匹配,即对于第一张图像中的每个点,在第二张图像中找到最佳匹配,反之亦

  • 我对查询和过滤器之间的区别有点困惑。我的困惑源于我在文档中读到的以下句子。 建议筛选器优于查询,因为筛选器不会触发分数计算。 只有在响应为是/否或精确搜索时才应使用筛选器。 筛选器可以有称为“查询筛选器”的查询(如“术语筛选器”等) 所有我想要的是过滤4个属性值,放在一个日期范围和总和(聚合)在几个字段。像这样