ElasticSearch分词器

什么是分词器?

分词器,是将用户输入的一段文本,分析成符合逻辑的一种工具。到目前为止呢,分词器没有办法做到完全的符合人们的要求和我们有关的分词器有英文的和中文的。英文的分词器过程:输入文本-关键词切分-去停用词-形态还原-转为小写。中文的分词器分为:单字分词 例:中国人 分成中、国、人;二分法分词:例中国人:中国、国人;词典分词:有基本的语意来进行分词的,例:中国人分成中国,国人,中国人,现在用的是极易分词和庖丁分词。
Elasticsearch中的分词器
ES中索引的建立和查询的时候,需要使用相同的分词器,才能查出正确的结果。
如果,我们想把一个短语、一句话、一个字段作为整体来查询,那么我们需要设置字段为不分词,也就是不分析。而默认String字段是分析的。

先建立一个索引

curl -XPUT localhost:9200/aaa

然后定义映射,注意:只有刚刚新建、还没有任何数据的索引,才能定义映射。定义映射Mapping可以使用_mapping RESTAPI,符合下面的标准语法:

curl -XPUT localhost:9200/索引名称/类型名称/_mapping?pretty -d '{"类型名称":{"properties":{"字段名称":{"type":"字段类型","store":"是否存储","index":"索引方式、是否分析"}}}}'

比如,其中str1为String类型不分析;其他的字段str2为默认配置,就不用设置了。

curl -XPUT localhost:9200/aaa/aaa/_mapping?pretty -d '{"aaa":{"properties":{"str1":{"type":"string","index":"not_analyzed"}}}}'


然后添加两条数据:

curl localhost:9200/aaa/aaa?pretty -d '{"str1":"hello, world!","str2":"goodbye! world"}'
curl localhost:9200/aaa/aaa?pretty -d '{"str1":"hello","str2":"world"}'           

分析的String如何查询

如果查询的单个词,分词的字段可以使用term进行查询,如下所示:如果查询的是一个单独的词,那么会返回包含它或者等于它的目标文档。

curl -XPOST localhost:9200/aaa/_search?pretty -d '{"query":{"term":{"str2":"world"}}}'

不分析的String如何查询

如果字段是不分词的,而查询的是这个字段里面的一个词,那么使用term时无法查询到目标文档的。

$ curl -XPOST localhost:9200/aaa/_search?pretty -d '{"query":{"term":{"str1":"hello"}}}'

使用term查询,如果该字段是不分词,只有完整的输入目标字段,才能正确的匹配。

curl -XPOST localhost:9200/abc/_search?pretty -d '{"query":{"term":{"str1":"hello, world!"}}}'

总结

对于分词的字段:

1 如果查询的是单个词,则查询到包含它的文档,返回结果与匹配程度有关
2 如果查询的是一段能被分析的话,比如hello world。那么查询的结果是包含分析得出的词的文档,即包含helloworld的全部文档。

对于不分词的字段:

只有查询的是 目标字段的精确值,才能匹配。

参考:http://www.cnblogs.com/xing901022/p/5235993.html
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值