zoukankan      html  css  js  c++  java
  • 7.搜索时控制精准度

    主要知识点:

    • 1、全文检索的时候,进行多个值的检索,有两种做法,match queryshould
    • 2、控制搜索结果精准度:and operatorminimum_should_match

       

       

    1、准备数据:为帖子数据增加标题字段

       

    POST /forum/article/_bulk

    { "update": { "_id": "1"} }

    { "doc" : {"title" : "this is java and elasticsearch blog"} }

    { "update": { "_id": "2"} }

    { "doc" : {"title" : "this is java blog"} }

    { "update": { "_id": "3"} }

    { "doc" : {"title" : "this is elasticsearch blog"} }

    { "update": { "_id": "4"} }

    { "doc" : {"title" : "this is java, elasticsearch, hadoop blog"} }

    { "update": { "_id": "5"} }

    { "doc" : {"title" : "this is spark blog"} }

       

    2、搜索标题中包含javaelasticsearchblog

    这个查询条件就跟之前的那个term query不一样了。term queryexact value,这个查询条件是进行full text(全文检索)。match query就是负责进行全文检索的。当然,如果检索到的fieldnot_analyzed类型的,那么match query也相当于term query

       

    GET /forum/article/_search

    {

    "query": {

    "match": {

    "title": "java elasticsearch"

    }

    }

    }

       

    3、搜索标题中包含javaelasticsearchblog

       

    搜索结果精准控制的第一步:灵活使用and关键字,如果你是希望所有的搜索关键字都要匹配的,那么就用and,可以实现单纯match query无法实现的效果。

       

    GET /forum/article/_search

    {

    "query": {

    "match": {

    "title": {

    "query": "java elasticsearch",

    "operator": "and"

             }

    }

    }

    }

       

    4、搜索包含javaelasticsearchsparkhadoop4个关键字中,至少3个的blog

       

    控制搜索结果的精准度的第二步:指定一些关键字中,必须至少匹配其中的多少个关键字,才能作为结果返回

       

    GET /forum/article/_search

    {

    "query": {

    "match": {

    "title": {

    "query": "java elasticsearch spark hadoop",

    "minimum_should_match": "75%"

    }

    }

    }

    }

       

    5、用bool组合多个搜索条件,来搜索title

       

    GET /forum/article/_search

    {

    "query": {

    "bool": {

    "must": { "match": { "title": "java" }},

    "must_not": { "match": { "title": "spark" }},

    "should": [

    { "match": { "title": "hadoop" }},

    { "match": { "title": "elasticsearch" }}

    ]

    }

    }

    }

       

    6bool组合多个搜索条件,如何计算relevance score

       

    mustshould搜索对应的分数,加起来,除以mustshould的总数得到相关度分数

    本例中

    排名第一:java,同时包含should中所有的关键字,hadoopelasticsearch

    排名第二:java,同时包含should中的elasticsearch

    排名第三:java,不包含should中的任何关键字

    由此should是可以影响相关度分数的,must是确保必须这个关键字,同时会根据这个must的条件去计算出document对这个搜索条件的relevance score在满足must的基础之上,should中的条件也可以不匹配,但是如果匹配的更多,那么documentrelevance score就会更高。

       

    7、搜索javahadoopsparkelasticsearch,至少包含其中3个关键字(用bool实现)

       

    默认情况下,should中的条件是可以一个都不匹配的,比如上面的搜索中,this is java blog,就没有匹配任何一个should条件。但是如果没有所在的查询语句中没有must语句的话,那么should必须至少匹配一个才可以。

    也可以精准控制should的多个条件中,至少匹配几个才能作为结果返回

       

    GET /forum/article/_search

    {

    "query": {

    "bool": {

    "should": [

    { "match": { "title": "java" }},

    { "match": { "title": "elasticsearch" }},

    { "match": { "title": "hadoop" }},

    { "match": { "title": "spark" }}

    ],

    "minimum_should_match": 3

    }

    }

    }

  • 相关阅读:
    2020软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    #数据挖掘与数据化运营实战#2.3数据挖掘技术以及在数据化运营中的应用
    #简单统计学#单样本t检验
    #简单统计学#加权平均数
    软件工程(2019)结对编程第二次作业
    软件工程(2019)结对编程第一次作业
    软件工程(2019)第三次个人作业
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8484318.html
Copyright © 2011-2022 走看看