elasticsearch使用笔记(二)

elasticsearch使用笔记(二)

bool查询

  1. Must,多个条件同时满足
  2. Should, 至少满足一个条件,可以通过minimum_match=n设置使至少满足n个条件

几种匹配形势的简介

  1. Term,精准查询(在目标字段后加.keyword,则为不分词)
{"term":{"name.keyword": "彭于晏"} }
  1. Terms,同1,可以看做一系列的term匹配,输入一个list中将匹配到的元素得分相加
{"terms":{"name.keyword": ["彭于晏","吴亦凡"]} }
  1. Match_phrase, 短语匹配,目标字段中出现同样的短语则匹配得分,可以认为是子串查询,通过设置slop=n可以允许目标短语中间有n个非查询短语中的词
{
        "match_phrase": {
            "title": "machine learning",
            "slop":3
        }

或者

{"match": {
    "title":  {
        "query": "machine learning",
        "type":  "phrase",
         "slop":3
    }
}
  1. Match, 单词匹配,然后计算相似度得分
{"match": {
    "title":  {
        "query": "machine learning",
    }
}
  1. Multi_match, 同时匹配好几个目标字段,在字段上^+weight可以设置权重,得分为最大分值字段的得分,tie_break=m表示得分为最大分值字段的得分+m*非最大分值字段的得分
{"multi_match":
                {
                    "query":"machine learning" ,
                    "fields": ["title", "abstract^0.5"],
                    "tie_breaker": 0.1
                }
            }

function score

Function_score, 一般用来进一步优化排序结果,设置权重等,可以使用guass等衰减函数

二次打分

Rescore, 二次打分,可以输入打分规则的脚本,但是全库搜索会极大降低搜索效率,所以一般选择对返回的前n个结果进行再次打分,并加在原本的得分上,以此优化排序

query模板

must_list 示例

must_list = [
{"term":{"name.keyword": "彭于晏"} },
{"term":{"position.keyword": "actor"} },
]

should_list示例

should_list = [
{"multi_match":
                {
                    "query":"machine learning" ,
                    "fields": ["title", "abstract^0.5"],
                    "tie_breaker": 0.1
                }
            },
 {
        "match_phrase": {
            "title": "machine learning",
            "slop":3
        }
]

function_list示例

functions_list= [{
            "gauss": {
                "count": {
                    "origin": 200,
                    "scale": "10",
                    "decay": "0.2"
                }
            }
        }]

万能query模板,可自由增删
最终的得分为query的得分*function_score+re_score

query = {
    "_source": ["name","title"], # 返回的字段
    "size": 100,
    "query": {
        "function_score": {
            "functions": functions_list,
            "query": {
                "bool": {
                    "must": must_list,
                    "should": should_list
                },
            },
            "score_mode": "multiply"}

        },
        "rescore":{
            "window_size":100,
                "query": {
                    "rescore_query": {
                        "bool":{
                            "should":rescore_list
                        }

                    }
                }

        }
    }

具体打分机制

之后再添加

发布了22 篇原创文章 · 获赞 0 · 访问量 4440

猜你喜欢

转载自blog.csdn.net/Yolo_C/article/details/103414707