我有以下弹性查询,
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 标题字段匹配是三个 - 时间比类别字段更重要,有没有办法实现它?
注意:我发现以下查询作为解决方案但不是我正在寻找的。 p>
{
"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。