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

 

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