查看elasticsearch分词处理效果

查询1

POST /bank/_search
{
  "query": {
    "bool": {
      "must": {
       "term": {
         "firstname" : "Amber"
       }
      }
    }
  }
}

查询1执行得到结果1,找不到匹配结果

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

查询2

POST /bank/_search
{
  "query": {
    "bool": {
      "must": {
       "term": {
         "firstname" : "amber"
       }
      }
    }
  }
}

查询3

POST /bank/_search
{
  "query": {
    "bool": {
      "must": {
       "term": {
         "firstname.keyword" : "Amber"
       }
      }
    }
  }
}

查询2和查询3执行得到结果2

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 6.5032897,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 6.5032897,
        "_source" : {
          "account_number" : 1,
          "balance" : 39225,
          "firstname" : "Amber",
          "lastname" : "Duke",
          "age" : 32,
          "gender" : "M",
          "address" : "880 Holmes Lane",
          "employer" : "Pyrami",
          "email" : "amberduke@pyrami.com",
          "city" : "Brogan",
          "state" : "IL"
        }
      }
    ]
  }
}

查询1找不到匹配结果,而查询2和查询3可以得到结果2,用下面的查询结果分析原因
查询分词结果:

Get /bank/_analyze
{
  "field":"firstname",
  "text":"Amber nihao  wohao"
}

分词的结果:

{
  "tokens" : [
    {
      "token" : "amber",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "nihao",
      "start_offset" : 6,
      "end_offset" : 11,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "wohao",
      "start_offset" : 13,
      "end_offset" : 18,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}

通过分词结果,可以看出,含有大写字母的Amber分词后,变成了amber,这也就是查询2可以匹配结果,而查询1匹配不到结果的原因。
最根本原因可以参考:https://segmentfault.com/q/1010000017312707

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 常用概念: 自然语言处理(NLP) 数据挖掘 推荐算法 用户画像 知识图谱 信息检索 文本分类 常用技术: 词级别...
    御风之星阅读 9,274评论 1 25
  • 转载请注明:终小南 » 中文分词算法总结 什么是中文分词众所周知,英文是以 词为单位的,词和词之间是靠空格隔开,而...
    kirai阅读 9,905评论 3 24
  • 本文是对ElasticSearch中文分词学习的一个知识总结,包括如下章节的内容: 基本概念 ik分词器的安装 i...
    我是老薛阅读 29,962评论 6 15
  • 初次接触 Elasticsearch 的同学经常会遇到分词相关的难题,比如如下这些场景: 为什么命名有包含搜索关键...
    rockybean阅读 4,775评论 0 6
  • 一 我出生在北方内陆的一个小城镇里面。 那时的我见过最大的河流就只是小镇旁边的一条小河。弯弯曲曲的流向远方,遇...
    郑少渊阅读 1,613评论 0 4