ES的 must 和 should 搜索失效問題

需求:  在搜索視頻的時候 , 我們需要選出isDel 字段爲0 和 isPublish字段爲1的數據 ,  還需要根據搜索的關鍵詞 "搞笑的" 去videoTitle和labels裏面查詢, 如果在其中一個有出現則需要篩出來

一: 使用bool 條件查詢 的must 和should 同級別查詢的話會失效, 如下所示:

{
    "from": 0,
    "size": 10,
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "isPublish": {
                            "value": 1,
                            "boost": 1
                        }
                    }
                },
                {
                    "term": {
                        "isDel": {
                            "value": 0,
                            "boost": 1
                        }
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "videoTitle": {
                            "query": "搞笑的",
                            "operator": "OR",
                            "prefix_length": 0,
                            "max_expansions": 50,
                            "fuzzy_transpositions": true,
                            "lenient": false,
                            "zero_terms_query": "NONE",
                            "auto_generate_synonyms_phrase_query": true,
                            "boost": 1.5
                        }
                    }
                },
                {
                    "match": {
                        "labels": {
                            "query": "搞笑的",
                            "operator": "OR",
                            "prefix_length": 0,
                            "max_expansions": 50,
                            "fuzzy_transpositions": true,
                            "lenient": false,
                            "zero_terms_query": "NONE",
                            "auto_generate_synonyms_phrase_query": true,
                            "boost": 1
                        }
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "version": true,
    "sort": [
        {
            "_score": {
                "order": "desc"
            }
        },
        {
            "watchCount": {
                "order": "desc"
            }
        }
    ]
}

二: 正確的使用方法應該是, must 級別下 , 分別有 must 和 should , 具體查詢如下:

{
    "from": 0,
    "size": 10,
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "isDel": {
                            "query": 0,
                            "operator": "OR",
                            "prefix_length": 0,
                            "max_expansions": 50,
                            "fuzzy_transpositions": true,
                            "lenient": false,
                            "zero_terms_query": "NONE",
                            "auto_generate_synonyms_phrase_query": true,
                            "boost": 1
                        }
                    }
                },
                {
                    "match": {
                        "isPublish": {
                            "query": 1,
                            "operator": "OR",
                            "prefix_length": 0,
                            "max_expansions": 50,
                            "fuzzy_transpositions": true,
                            "lenient": false,
                            "zero_terms_query": "NONE",
                            "auto_generate_synonyms_phrase_query": true,
                            "boost": 1
                        }
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "match": {
                                    "videoTitle": {
                                        "query": "權重",
                                        "operator": "OR",
                                        "prefix_length": 0,
                                        "max_expansions": 50,
                                        "fuzzy_transpositions": true,
                                        "lenient": false,
                                        "zero_terms_query": "NONE",
                                        "auto_generate_synonyms_phrase_query": true,
                                        "boost": 1.5
                                    }
                                }
                            },
                            {
                                "match": {
                                    "labels": {
                                        "query": "權重",
                                        "operator": "OR",
                                        "prefix_length": 0,
                                        "max_expansions": 50,
                                        "fuzzy_transpositions": true,
                                        "lenient": false,
                                        "zero_terms_query": "NONE",
                                        "auto_generate_synonyms_phrase_query": true,
                                        "boost": 1
                                    }
                                }
                            }
                        ],
                        "adjust_pure_negative": true,
                        "boost": 1
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "version": true,
    "sort": [
        {
            "_score": {
                "order": "desc"
            }
        },
        {
            "watchCount": {
                "order": "desc"
            }
        }
    ]
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章