ElasticSearch(四)深入搜索查询

一、评分机制

相关性

搜索的相关性算分,描述了一个文档和查询语句匹配成都;es 会对每个匹配条件的结果进行算分,打分的本质是排序;5之前采用TF-IDF,后面采用BM 25;

(*注意:往往分词器分词的结果也会对得分产生影响,可以先看看分词的结果再去判断评分)

算法

TF-IDF

是一种用于信息检索与数据挖掘的常用加权技术;

计算公式:

ElasticSearch(四)深入搜索查询_第1张图片

TF是词频

IDF是逆向文本率:每个检索词在索引中出现的频率,频率越高,相关性越低;(指的是整个文档中的占比)十篇文章中都有结果和一篇文章中有结果,显然一篇文章有结果相关性更强;

字段长度归一值:字段越短,字段占比越高,相关度越高;

BM25 算法
主要针对词频的增加,评分增加逐渐趋于平缓的优化;

二、算分分析

GET /索引名称/_search

{

        "explain":true,
        "query":{
                "match":{
                        "title":"java设计模式"

                }        

        },

        "size":10

}

三、Boosting

Boosting是控制相关度的一种手段;

参数boost的含义:
当boost > 1时,打分的权重相对性提升
当0 < boost <1时,打分的权重相对性降低
当boost <0时,贡献负分

返回匹配positive查询的文档并降低匹配negative查询的文档相似度分。

GET /test_score/_search

{
    "query":{
        "boosting":{
            "positive":{
                "term":{
                    "content":"elasticsearch"
                }
            },
            "negative":{
                "term":{
                    "content":"like"
                }
            },
            "negative_boost":0.2
        }
    }
}

 "negative_boost":0.2

内容包含like的得分乘以0.2;

四、布尔查询

一个bool查询是一个或多个查询子句组合;

                a、must: 必须匹配,共享算分;

                b、should:选择性匹配 相当于或 贡献算分;

                c、must_not:必须不匹配,不贡献

                d、filter:必须匹配,不贡献算分

Query和filter4两种不同的上线文:Query 相关性算分,filter不需要算分,可以利用Cache,性能更好;

复合查询语句的相关性评分是将子查询语句合并得到的结果;

 GET /索引名/_search
{
    "query":{
        "bool":{
            "must":{
                "match":{
                    "remark":"java"
                }
            },
            "filter":{
                "term":{
                    "sex":"1"
                }
            },
            "must_not":{
                "range":{
                    "age":{
                        "gte":30
                    }
                }
            },
            "should":[
                {
                    "term":{
                        "address.keyword":{
                            "value":"安徽"
                        }
                    }
                },
                {
                    "term":{
                        "address.keyword":{
                            "value":"安徽合肥"
                        }
                    }
                }
            ],
            "minimum_should_match":1
        }
    }
}

使用bool查询控制算分

 GET /索引名/_search

{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "title":{
                            "query":"apple,ipad",
                            "boost":1
                        }
                    }
                },
                {
                    "match":{
                        "content":{
                            "query":"apple,ipad",
                            "boost":4
                        }
                    }
                }
            ]
        }
    }
}

你可能感兴趣的:(elasticsearch,大数据,搜索引擎)