elasticsearch学习8--Full text queries全文检索之multi_match 、query_string 与simple_query_string query

本文将继续使用elasticsearch学习7–Full text queries全文检索之match_phrase query与match_phrase_prefix query中的数据。数据内容如下(具体mapping见elasticsearch学习7):

{ “id” : 1,“content”:“关注我,系统学编程” }
{ “id” : 2,“content”:“系统学编程,关注我” }
{ “id” : 3,“content”:“系统编程,关注我” }
{ “id” : 4,“content”:“关注我,间隔系统学编程” }

1、multi_match query

# 1.同时查询  "content", "content.ik_smart_field",得到文档3
POST /test_003/_doc/_search
{
  "query": {
    "multi_match": {
      "query": "系统",
      "fields": [
        "content",
        "content.ik_smart_field"
      ]
    }
  }
}

# 2.同时查询所有字段,得到所有文档
POST /test_003/_doc/_search
{
  "query": {
    "multi_match": {
      "query": "系统",
      "fields": [
        "content",
        "content.ik_smart_field",
        "content.ik_max_field"
      ]
    }
  }
}

结果分析: 首先要知道的是,多个field之间的查询关系是 or
【语句一】检索关键词“系统”,系统的Token就是【系统】,“content”字段没有指定分词器,默认为标准分词器,标准分词器将一个中文字分成一个Token,所以“content”字段不包含【系统】Token。ik_smart_field根据ik_smart分词,四个文档中有【系统】Token的只有文档3,其他都是【系统学】。

【语句二】检索关键词“系统”,“content”字段的结果为空,"content.ik_smart_field"的结果为文档3。"content.ik_max_field"使用的是“ik_max_word”分词器,所以每个文档中都有【系统】Token。

2、query_string query

允许我们在单个查询字符串中指定AND | OR | NOT条件,同时也和 multi_match query 一样,支持多字段搜索。

# 1.检索同时包含Token【系统、es】的文档,结果为空
POST /test_003/_doc/_search
{
    "query": {
        "query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统 AND es"
        }
    }
}
# 2.检索包含Token【系统、es】二者之一的文档,能检索到文档3
POST /test_003/_doc/_search
{
    "query": {
        "query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统 OR es"
        }
    }
}

结果分析:
【语句一】检索既包含【系统】Token又包含【es】Token的文档,由于所有文档都没有【es】Token,所以结果为null。
【语句二】检索包含【系统】Token或者包含【es】Token的文档,四个文档中有【系统】Token的只有文档3,其他都是【系统学】,所以结果为文档3。

3、simple_query_string query

类似于query_string ,但是会忽略错误的语法,永远不会引发异常,并且会丢弃查询的无效部分
simple_query_string支持以下特殊字符:

+表示与运算,相当于query_string 的 AND
|表示或运算,相当于query_string 的 OR
-取反单个令牌,相当于query_string 的 NOT
“” 表示对检索词进行 match_phrase query
*字词末尾表示前缀查询

1) + 表示与运算,相当于query_string 的 AND

# 检索到文档4
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统学 + 间隔"
        }
    }
}

2) | 表示或运算,相当于query_string 的 OR

# 检索到文档124
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统学 | 间隔"
        }
    }
}

3) - 取反单个令牌,相当于query_string 的 NOT

# 检索到文档12
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统学 -间隔",
            "default_operator": "and"
        }
    }
}

注意:参数"default_operator": “and”。该参数的默认值为or。 相当于【where Token = 系统学 and Token <> 间隔】

4) “” 表示对检索词进行 match_phrase query

# 检索到文档2
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "\"系统学编程关注\""
        }
    }
}
# 检索到所有文档
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统学编程关注"
        }
    }
}

分析:“query” : ““系统学编程关注””,会对检索词执行 match_phrase query !

5) * 字词末尾表示前缀查询 -match_phrase_prefix query

# 检索到文档 3
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统"
        }
    }
}
# 检索到所有文档,等价于match_phrase_prefix query
POST /test_003/_doc/_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content.ik_smart_field"],
            "query" : "系统*"
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值