Elasticsearch either or 条件、Or 条件、IF Else 条件、优先级查询

Elasticsearch either or condition, Or condition , IF Else condition, Priority query

提问人:Silent Killer 提问时间:11/21/2022 最后编辑:James ZSilent Killer 更新时间:11/22/2022 访问量:114

问:

我有两个关于短语匹配和标记匹配的查询。我希望仅在短语匹配失败时触发标记化匹配。

所以查询 A=短语匹配,查询 B=标记化匹配。

GET /content_card/_search

    { "size":1000,
      "track_total_hits": true,
      "query": {
        "bool": {
          "should": [
            {
              "multi_match": {
                "query": "The Chosen",
                "fields": [
                  "title^9",
                  "original_title^9"
                ],
                "type": "phrase_prefix",
                "boost": 9
              }},
            {
              "multi_match": {
                "query": "The chosen",
                "fields": [
                  "title^9",
                  "original_title^9",
                  "content_type^9",
                  "type^7",
                  "content_category^7",
                  "genres^7",
                  "lang_names^7",
                  "keywords^7",
                  "cast_names^7",
                  "crews^7",
                  "country_names^5",
                  "overview^5",
                  "company_names^5",
                  "network_names^5",
                  "additional_company_names^5",
                  "content_status^1",
                  "release_year^1",
                  "ratings^1",
                  "seasons_names^1",
                  "episodes_names^0",
                  "_charcters^1"
                ],
                "type": "best_fields"
              }
            }
          ],
          "minimum_should_match": 1
        }
      }
    }

简单地使用 should 使查询 B 的结果在显示完查询 A 的结果后显示。我只想将查询 B 结果作为查询 A 的回退。任何人都可以帮忙获得查询的解决方案。如果有其他方法,也请告诉我。重复以下行以发布查询

python-3.x elasticsearch 布尔逻辑

评论

0赞 Amit 11/22/2022
你有机会看看我的答案吗?

答:

1赞 Amit 11/21/2022 #1

您正在查找的内容在 Elasticsearch 中是不可能的,您没有在 Elasticsearch 中触发查询的条件方式,您需要在进行这些 Elasticsearch 查询的应用程序中处理,这很容易实现,对于每个 Elasticsearch 查询,都不会返回任何搜索结果,如果它为 0,您可以发送标记化或第二个查询。

看起来您对 Elasticsearch 中的布尔查询/子句感到困惑,请参阅官方文档,该文档通过很好的例子解释了这个概念以获取更多信息。