Elasticsearch either or condition, Or condition , IF Else co



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

所以查询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
}
}
}

简单地使用应该使查询B的结果在完成显示查询a的结果后出现。我希望查询B结果仅作为查询a的回退。任何人都可以帮助获得查询的解决方案。如果有其他方法也请让我知道。下面一行重复发布查询

你所寻找的在Elasticsearch中是不可能的,你没有在Elasticsearch中触发查询的条件方式,你需要在你的应用程序中处理这些Elasticsearch查询,这很容易实现,每个Elasticsearch查询,没有搜索结果返回,如果它是0,你可以发送你的标记化或第二个查询。

看起来你也对Elasticsearch中的布尔查询/子句感到困惑,参考官方文档,其中用很好的例子解释了这个概念,以获得更多信息。

最新更新