•  

【20201018】ElasticSearch全文匹配和搜索精度

发表于 2020-07-14,阅读 24

介绍

介绍

我们在使用elastic search进行搜索的时候,会需要对搜索结果进行调整,以达到最佳效果

今天就跟着福哥来了解一下ES的匹配模式的知识吧

教程

match(全文匹配)

这种方式就是根据默认规则进行匹配,并根据默认权重进行排序的

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
          "userName": "福哥"
        }
      }
    }
  }
}

minimum_should_match(匹配度匹配)

分词个数匹配度

设置最小匹配度为1,表示只要有一个分词命中就匹配出来

如果匹配度数字设置过大,会出现大量查询不到结果的情况

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
          "userName": {
            "query":"福哥",
            "minimum_should_match": 1
          }
        }
      }
    }
  }
}

百分比匹配度

设置最小匹配度为50%,表示只要有一半的分词命中就匹配出来

如果匹配百分比设置接近100%,会出现大量查询不到结果的情况

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
          "userName": {
            "query":"福哥",
            "minimum_should_match": "50%"
          }
        }
      }
    }
  }
}

组合匹配度

设置组合匹配度3<80%,这个有点复杂,分两种情况

如果不高于下限(3)则下限(3)和上限(80%)都要判断

如果高于下限(3)则只有上限(80%)会被判断

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
          "userName": {
            "query":"福哥",
            "minimum_should_match": "3<80%"
          }
        }
      }
    }
  }
}

match_phrase(精确匹配)

这种方式就是需要查询字符串完全在目标字符串当中才行,类似SQL的(like '%福哥%')意思

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match_pharse": {
          "userName": "福哥"
        }
      }
    }
  }
}

总结

福哥整理了一些关于使用ElasticSearch的搜索技巧,后面福哥会不断精进关于ES的搜索技巧的内容,大家可以持续关注“同福编程”。


鬼谷子叔叔
  • 日志:212
  • 回复:13

进入ta的主页