zoukankan      html  css  js  c++  java
  • 20.混合使用match和近似匹配实现召回率与精准度的平衡

    主要知识点:

    • 召回率的慨念
    • 精准度的慨念
    • match和近似匹配混合使用方法

       

       

    召回率(recall:比如你搜索一个java spark,总共有100doc,能返回多少个doc作为结果,就是召回率。

    精准度(precision:比如你搜索一个java spark,能不能尽可能让包含java spark,或者是javaspark离的很近的doc的分数越高排在最前面。

    直接用match_phrase短语搜索,会导致必须所有term都在doc field中出现,而且距离在slop限定范围内,才能匹配上。如果某一个doc可能就只一有某一个term没有包含到,也是无法作为结果返回。比如:

    java spark --> hello world java --> 就不能返回了

    java spark --> hello world, java spark --> 才可以返回

       

    近似匹配的时候,召回率比较低,精准度太高了

    直接用match进行查询时召回率较高,但是精准度太低了。

       

    很多时候我们可能希望有部分term被匹配也能做为结果返回,并且返回的结果集中,以近似匹配的方式进行排序。这时就要混合使用match和近似匹配实现召回率与精准度的平衡。此时可以用bool组合match querymatch_phrase query一起,来实现上述效果。

       

    一、先执行macth查询:

       

    GET /forum/article/_search

    {

    "query": {

    "match": {

    "content": "java spark"

    }

    }

    }

    查出4条数据,最大数据的分数是

       

    二、再进行match_phrase查询:

    GET /forum/article/_search

    {

    "query": {

    "match_phrase": {

    "content": {

    "query": "java spark",

    "slop":50

    }

    }

    }

    }

    查询出一条结果,可以和上边作分数比较,本次查询分数较低。

    三、混合查询

       

    GET /forum/article/_search

    {

    "query": {

    "bool": {

    "must": [

    {"match": {

    "content": "java spark"

    }}

    ],

    "should": [

    {"match_phrase": {

    "content": {

    "query": "java spark",

    "slop":50

    }

    }}

    ]

    }

    }

    }

    也查出两条结果,但是两条结果的分数和上两次查询都不同,满足了我们的需求,

  • 相关阅读:
    Android开发:关于WebView
    PHP+JQUEY+AJAX实现分页
    Bootstrap入门(二)栅格
    BootStrap入门教程 (一)
    mac 终端命令
    没有功能需求设计文档?对不起,拒绝开发!
    React 入门教程
    Webpack+React+ES6开发模式入门指南
    webpack2.0+ vue2.0
    一个小时学会jQuery
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8526467.html
Copyright © 2011-2022 走看看