1、前言

    term级别查询将按照存储在倒排索引中的确切字词进行操作,这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,它们允许您制作低级查询,并在分析过程之前进行。
    term级别的查询包括以下几种查询方式:
    

    1.1、term query

      term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个。比如说我们要查找年龄为39的所有文档

      

POST /bank/_search?pretty
{
"query": {
"term": {
"age": ""
}
}
}

    结果:

    

   另外再查询address=Avenue的文档,没有查到结果

    

    为什么?

    字符串字段可以是文本类型(视为全文,如电子邮件正文)或关键字(视为精确值,如电子邮件地址或邮政编码)。精确值(如数字,日期和关键字)具有在添加到倒排索引的字段中指定的确切值,以使其可被搜索。

    但是,分析文本字段。这意味着它们的值首先通过一个分析器产生一个项目列表,然后将其添加到倒排索引中。

    分析文本的方法有很多种:默认的标准分析器会删除大部分的标点符号,将文本分解为单个的单词,并将其分解为小写字母。例如,标准分析仪会将字符串“Quick Brown Fox!”变成[quick,brown,fox]。

    先看Avenue的分析

    

    因为171 Putnam Avenue被分解为 171,putnam,avenue三个词,因此在Avenue时无法查询到,因为第一个字符是大写

    下面做一个测试演示

    首先,创建一个索引,指定字段映射,并索引一个文档

    创建索引和索引数据

    

PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"full_text": {
"type": "text"       
},
"exact_value": {
"type": "keyword"     
}
}
}
}
} PUT my_index/my_type/1
{
"full_text": "Quick Foxes!",   3
"exact_value": "Quick Foxes!"   
}

     1、full_text字段是文本类型,将被分析。

       2、exact_value字段是关键字类型,不会被分析。

    3、full_text倒排索引将包含术语:[quick,foxes]。

    4、exact_value倒排索引将包含确切的术语:[Quick Foxes!]

    现在,比较术语查询和匹配查询的结果:

    

GET my_index/my_type/_search
{
"query": {
"term": {
"exact_value": "Quick Foxes!"   
}
}
} GET my_index/my_type/_search
{
"query": {
"term": {
"full_text": "Quick Foxes!"   
}
}
} GET my_index/my_type/_search      
{
"query": {
"term": {
"full_text": "foxes"
}
}
} GET my_index/my_type/_search
{
"query": {
"match": {
"full_text": "Quick Foxes!"
}
}
}

    1、此查询匹配,因为exact_value字段包含确切的术语Quick Foxes !.

    2、这个查询不匹配,因为full_text字段只包含quick和foxes这两个词。 它不包含确切的术语Quick Foxes !.

    3、术语foxes的查询匹配full_text字段。

    4、full_text字段上的匹配查询首先分析查询字符串,然后查找包含快速或狐狸或两者的文档。

    再看看分析

GET /my_index/_analyze
{
"field": "exact_value",
"text": "Quick Foxes!"
} 结果:
{
"tokens": [
{
"token": "Quick Foxes!",
"start_offset": 0,
"end_offset": 12,
"type": "word",
"position": 0
}
]
}
GET /my_index/_analyze
{
"field": "full_text",
"text": "Quick Foxes!"
}
结果: {
"tokens": [
{
"token": "quick",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "foxes",
"start_offset": 6,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 1
}
]
}

    

    

最新文章

  1. jquery在线扫雷
  2. [No00009A]JsonToObject json与类互转
  3. EasyUI DataGrid 修改每页显示数量的最大值&&导出Grid到Excel
  4. [SI]source insight使用
  5. what is a ear
  6. Maya 脚本控制物体自转
  7. 让MyEclipse2013兼容Retina屏幕
  8. 一机运行多个resin的配置
  9. 升级树莓派archlinux系统到新sd卡
  10. linux 文件、文件夹的重命名命令
  11. 深入浅出数据结构C语言版(5)——链表的操作
  12. 试用MarkDown
  13. java基础之二分法查找
  14. (三十三)UIApplicationDelegate和程序的启动过程
  15. arcgis中转换netCDF为栅格数据
  16. JAVA 平时作业二
  17. mysql 替换字符中部分字符,替换使用指定字符
  18. 数学——Euler方法求解微分方程详解(python3)
  19. mybatis框架之foreach标签
  20. HTML学习-1网页基础知识

热门文章

  1. 6.flume实战(三)※
  2. MongoDB多集合排序的一种实现
  3. docker从零开始网络(七) 配置daemon和容器
  4. python的property的用法
  5. NetBeans中从实体创建Restful webservice工程
  6. PDCurses 笔记(一)
  7. 阿里云ECS(Centos7.2 64bit)安装Docker
  8. Nginx 的安装配置入门(mac)
  9. thinkphp实现功能:验证码
  10. 识别浏览器的JavaScript引擎的方法