如何在more_like_this中使用提升或重量

时间:2017-10-14 09:41:46

标签: elasticsearch

我有以下弹性查询,

   more_like_it_match = {
        "min_score": 5,
        "query":
            {"filtered": {
                "query": {
                    "bool": {
                        "must": {
                            "more_like_this": {
                                "fields": ["title","desc","cat_id","user_id"],
                                "like": {
                                    "doc": {
                                        "title": item["title"],
                                        "desc": item["desc"],
                                        "cat_id": item["cat_id"],
                                        "user_id": item["user_id"],
                                    },
                                },
                                "min_term_freq": 1,
                                "max_query_terms": 100,
                                "min_doc_freq": 0
                            }
                        }
                    }
                },
                "filter": {
                    "not": {
                        "term": {
                            "id": item["id"]
                        }
                    }
                }
            }
        }
    }

它工作正常,但我正在寻找一个解决方案,我可以为每个字段设置提升或重量,例如我想对Elastics 标题字段匹配是三个 - 时间比类别字段更重要,有没有办法实现它?

注意:我发现以下查询作为解决方案但不是我正在寻找的。

 {
        "min_score" : 5,
        "query": {
            "dis_max": {
               "queries": [
                   {
                    "more_like_this" : {
                        "fields" : ["title"],
                        "like_text" : item["title"],
                        "min_term_freq" : 1,
                        "max_query_terms" : 100,
                        "boost": 100
                    }
                   },
                   {
                    "more_like_this" : {
                        "fields" : ["desc"],
                        "like_text" : item["desc"],
                        "min_term_freq" : 1,
                        "max_query_terms" : 100,
                        "boost": 100,
                    }
                   }
                ]
            }
        },
        "filter":{
            "not":{
                "term" :{
                    "id": item["id"]
                }
            }
        }
    }

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html

  

Dis Max Queryedit   一个查询,用于生成由其子查询生成的文档的并集,并为每个文档评分由任何子查询生成的该文档的最大分数,以及任何其他匹配子查询的平局增量。

     

当在具有不同增强因子的多个字段中搜索单词时,这非常有用(因此不能将字段等效地组合到单个搜索字段中)。我们希望主要分数是与最高提升相关联的分数,而不是字段分数的总和(如布尔查询所给出的)。如果查询是“albino elephant”,则这确保匹配一个字段的“albino”和匹配另一个字段的“elephant”获得比匹配两个字段的“albino”更高的分数。要获得此结果,请同时使用Boolean Query和DisjunctionMax Query:对于每个术语,DisjunctionMaxQuery在每个字段中搜索它,而将这些DisjunctionMaxQuery的集合组合成BooleanQuery。

0 个答案:

没有答案