ES minimum_should_match

最近在处理关键词匹配文章的项目,比如给定“Ukip Vimpat applies” 查询指定的title中含有至少2个词的内容

# 查看分词情况
POST _analyze
{
  "analyzer": "standard",
  "text": [
    "Ukip Vimpat applies"
  ]
}  

  如下是分词的结果

 

 

在10w级数量上查询包含至少2个词的文章,利用ES的minimum_should_match 可以很容易解决这类问题,

minimum_should_match 中即可以是整数,即包含的单词个数,

如minimum_should_match :2   表示“Ukip Vimpat applies”这个词至少包含2个单词 

minimum_should_match 如果为百分比,即分词后的个数*百分比,

如minimum_should_match : "75%"   表示“Ukip Vimpat applies”分词后的个数为3,最后为3*0.75 

如果为百分数,小数是向下去整,所以最好的还是通过计算分词的数量,给一个整数

 
GET seojoindata/_search
{
  "track_total_hits": true,
  "size": 10,
  "query": {
    "match": {
      "title_en": {
        "query": "Ukip Vimpat applies",
        "minimum_should_match":"75%"
      }
    }
  },
  "_source": {
    "includes": [
      "title_en",
      "article_summery"
    ]
  },
  "highlight": {
    "fields": {
      "title_en": {
        "type": "plain",
        "no_match_size": 400,
        "pre_tags": [
          "<span>"
        ],
        "post_tags": [
          "</span>"
        ]
      }
    }
  }
}

  

 

 

 

 

 

 关于分词的情况参考 https://www.cnblogs.com/feng07/p/11571152.html

posted @ 2022-04-19 16:49  kakaok  阅读(630)  评论(0编辑  收藏  举报