首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >search(11)- elastic4s-模糊查询

search(11)- elastic4s-模糊查询

作者头像
用户1150956
发布2020-05-18 15:55:40
3230
发布2020-05-18 15:55:40
举报

很多时候搜索用户对查询语句具有模糊感觉,他们只能提供大约的描述。比如一个语句的部分,或者字句顺序颠倒等。通过模糊查询可以帮助用户更准确的找出他们希望搜索的结果。

模糊查询包括前后缀,语句(phrase)查询。前缀查询在非文本查询和全文查询字段中使用是有着不同的效果:在非文本字段查询中我们需要严格按照词字顺序进行匹配,而全文查询中由于目标字段在构建索引时已经进行了分词处理,所以匹配是在分词中进行匹配的。下面是一些非文本前后缀查询的例子:

POST /bank/_search
{
  "query" : {
    "prefix" : {
       "address.keyword": "880"
    }
  }
}
POST /bank/_search
{
  "query" : {
    "wildcard": {
       "address.keyword": "*Holmes*"
    }
  }
}
POST /bank/_search
{
  "query" : {
    "regexp": {
       "address.keyword": ".*Holmes.*"
    }
  }
}

elastic4例子:

  val qPrefix = search("bank").query(prefixQuery("address.keyword","880"))
  val qWildcard = search("bank").query(wildcardQuery("address.keyword","*Holmes*"))
  val qRegex = search("bank").query(regexQuery("address.keyword",".*Holmes.*"))

全文查询中常用match_phrase:这是一种语句查询。如:

GET /books/_search
{
  "query": {
    "match_phrase": {
      "publisher": "人民出版社"
    }
  }
}

一个有意义的语句中每个字在句子中的位置都是按顺序的。“人民出版社”可能被分词成“人民”、“人民版”,“人民社”、“社“等。但实际上很多图书行内人称“人社版“。也就是说应该容许一定程度的灵活性,即字在句中的位置容许一定程度的错位。这个程度可以用slop来表示:

GET /books/_search
{
  "query": {
    "match_phrase": {
      "publisher": {
        "query": "人社版",
        "slop" : 10
      }
    }
  }
}

上面这个slop = 10 的意思是我们可以容许十步字距调整。slop值越大覆盖词段越广,不过可能会影响效率。elastic4请求表达如下:

  val qPhrase = search("books").query(
    matchPhraseQuery("PUBLISHER","人社版").slop(10)
  )

另外,match_phrase在用户录入查询条件时可以作为提示(auto-completion)或者即录即查(search_as_you_type)使用。这时用前缀查询match_phrase_prefix最为合适。因为可以兼顾英文到字母层级的录入查询:

GET /books/_search
{
  "query": {
    "match_phrase_prefix": {
      "publisher": {
        "query": "人社版",
        "slop" : 10
      }
    }
  }
}

用elastic4来表示:

  val qPhrasePfx = search("books").query(
    matchPhrasePrefixQuery("PUBLISHER","人社版").slop(10)
  )
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档