美文网首页
ES文档级查询匹配限制

ES文档级查询匹配限制

作者: 郭彦超 | 来源:发表于2020-04-10 18:17 被阅读0次

    terms_set

    terms_set 支持文档级匹配查询限制,terms_set 与terms query语句很类似,区别在于terms_set 可以做到细粒度查询控制,每个文档中可以指定一个数值类型的字段用来控制匹配的term数,例如

    PUT /job-candidates
    {
        "mappings": {
            "properties": {
                "name": {
                    "type": "keyword"
                },
                "programming_languages": {
                    "type": "keyword"
                },
                "required_matches": {
                    "type": "long"
                }
            }
        }
    }
    
    
    • required_matches
      required_matches用来做query时的匹配限制,如果某个文档中该值为2,那么terms_set 查询query中需要至少2个term匹配上才能返回该文档
    PUT /job-candidates/_doc/1?refresh
    {
        "name": "Jane Smith",
        "programming_languages": ["c++", "java"],
        "required_matches": 1
    }
    
    PUT /job-candidates/_doc/2?refresh
    {
        "name": "Jason Response",
        "programming_languages": ["java", "python"],
        "required_matches": 2
    }
    
    
    GET /job-candidates/_search
    {
        "query": {
            "terms_set": {
                "programming_languages": {
                    "terms": ["c++", "java", "php"],
                    "minimum_should_match_field": "required_matches"  ## 以文档中required_matches字段值为准
                }
            }
        }
    }
    

    minimum_should_match_field 也可以换成minimum_should_match_script;minimum_should_match_script可以执行一个scrip脚本 ;由于minimum_should_match不能超过terms_set的长度,所以可以这么做:

    GET /job-candidates/_search
    {
        "query": {
            "terms_set": {
                "programming_languages": {
                    "terms": ["c++", "java", "php"],
                    "minimum_should_match_script": {
                       "source": "Math.min(params.num_terms, doc['required_matches'].value)"
                    },
                    "boost": 1.0
                }
            }
        }
    }
    

    其中 params.num_terms 对应terms_set的长度,doc['required_matches'].value对应文档中required_matches的value

    相关文章

      网友评论

          本文标题:ES文档级查询匹配限制

          本文链接:https://www.haomeiwen.com/subject/wvkdmhtx.html