1. 分词的时机

  对于ES来讲,可以对文档的内容进行分词(前提是设置了analyzed),也可以对输入的搜索词进行分词。对输入的搜索词进行分词时需要看下使用的什么类型的query。不同的query可能会对词进行分词,也可能不分词。无论是文档分词还是搜索词分词,依赖于使用的是什么分词器。分词的结果和分词规则(假设使用的是默认的standard),去掉大部分标点符号,并以此分割原词为多个词,把分分割后的词转为小写(汉字的话分完的结果)放入token组中,对于not-analyzed的词,直接把原词放入token组中。如下所示:

http://192.168.1.114:9200/_analyze?pretty&analyzer=standard&text=销售管理,结果:

{
tokens: [
{
token: "销",
start_offset: ,
end_offset: ,
type: "<IDEOGRAPHIC>",
position:
},
{
token: "售",
start_offset: ,
end_offset: ,
type: "<IDEOGRAPHIC>",
position:
},
{
token: "管",
start_offset: ,
end_offset: ,
type: "<IDEOGRAPHIC>",
position:
},
{
token: "理",
start_offset: ,
end_offset: ,
type: "<IDEOGRAPHIC>",
position:
}
]
}

如果进行搜索的时候会使用倒排索引的方式进行查找。
使用不同类型的query进行搜索
1. termQuery的机制是:直接去匹配token,如上面的分词结果如果是
  termQuery(销售)//无结果,token数组不存在
  termQuery(销)//  有结果,token数组中存在
  termQuery(售)//  有结果,token数组中存在
2. matchQuery的机制是:先检查搜索的字段类型是否是analyzed,如果是,则先使用分词器分词,再去去匹配token;如果查询的字段没有被分词,则直接去匹配token。
  matchQuery(销售)
  2.1 如果查询的'销售' 字段在建索引的时候没有指定not_analyzed,那么会先进行分词在查询。会分为'销'和'售',然后依次进行查询。
  2.2 如果指定了not_analyzed,那么将直接使用'销售'进行查询。

Elasticsearch学习之SearchRequestBuilder的query类型的更多相关文章

  1. Elasticsearch学习之SearchRequestBuilder常用方法说明

    SearchRequestBuilder常用方法说明  (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index: (2) ...

  2. Elasticsearch学习笔记-Delete By Query API

    记录关于Elasticsearch的文档删除API的学习 首先官网上Document APIs介绍了 Delete API 和Delete By Query API. Delete API可以通过指定 ...

  3. Elasticsearch学习笔记(十二)filter与query

    一.keyword 字段和keyword数据类型    1.测试准备数据 POST /forum/article/_bulk { "index": { "_id" ...

  4. ElasticSearch 学习记录之Text keyword 两种基本类型区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  5. ElasticSearch 学习记录之ES短语匹配基本用法

    短语匹配 短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配 下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点 GET /my_index/my_type/_sea ...

  6. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  7. ElasticSearch 学习记录之ES高亮搜索

    高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...

  8. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

    ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...

  9. ElasticSearch 学习记录之父子结构的查询

    父子结构 父亲type属性查询子type 的类型 父子结构的查询,可以通过父亲类型的字段,查询出子类型的索引信息 POST /product/_search { "query": ...

随机推荐

  1. UITableViewCell : 横向

    在自定义 UITableViewCell 的 layoutSubviews 方法中添加如下代码 - (void)layoutSubviews { [super layoutSubviews]; if ...

  2. Linux 找不到php.ini

    在部署环境中利用phpinfo()查看,显示php.ini 路径为/usr/local/php5/lib 但是到对应路径中,找不到php.ini文件,在网上找到相关方法,留下备注. Configura ...

  3. asp.net导出EXCEL的好方法!(好用,导出全部数据)

    1.调用方法: ExportExcel("application/ms-excel", "EXCEL名称.xls", GridView1, this.Page) ...

  4. jQuery实现自动调用和触发某个事件的方法

    1.比如我们通过jquery定义了一个点击事件,我们如何自动触发他: $(function(){    $('#button').click(function(){      alert('butto ...

  5. Python爬虫-爬取科比职业生涯高清图集

    前面学习了Python爬取豆瓣电影Top250的数据,爬取的信息是电影信息的文本信息,但是在互联网上流行的图片才有更大的吸引力,本篇我们来使用python爬取网页上的图片并保存在本地硬盘上,很兴奋吧, ...

  6. js提取新浪邮箱的信用卡

    js提取用户新浪邮箱中的信用卡信息,是js非nodejs. 对比py,之前就做不好,出现了复杂点选验证码.js的开发速度只需要py的三分之一,甚至十分之一. js在客户端执行,py在后端执行,py要实 ...

  7. faster-rcnn原理及相应概念解释

    R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...

  8. mac版本cornerstone的无限期破解方法(转)

    CornerStone是个人非常喜欢的mac上的一款SVN客户端工具,官方提供了14天的免费试用(trail)版本.我们可以在此基础上提供无限期试用版本. 方法一:如果你从来没有安装过这个trail版 ...

  9. php中实现记住密码下次自动登录的例子

    这篇文章主要介绍了php中实现记住密码下次自动登录的例子,本文使用cookie实现记住密码和自动登录功能,需要的朋友可以参考下 做网站的时候经常会碰到要实现记住密码,下次自动登录,一周内免登陆,一个月 ...

  10. MyBatis 与 Spring 是如何结合在一起工作的——mybatis-spring(version:1.2.2)

    在MyBatis-Spring的项目中,我们一般会为MyBatis配置两个配置文件 beans-mybatis.xml 和 mybatis-config.xml.其中 beans-mybatis.xm ...