今天同事使用ES查询印地语的文章。发现查询报错,查询语句和错误信息如下:

  1. 查询语句:
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "range":{
                            "update_time":{
                                "gt":"1488556800000"
                            }
                        }
                    },
                    {
                        "terms":{
                            "lang":1
                        }
                    },
                    {
                        "terms":{
                            "domain":[
                                "dailymasala.co",
                                "goldenmob.com"
                            ]
                        }
                    },
                    {
                        "prefix":{
                            "user_id":"errVideo_setInterval_"
                        }
                    }
                ]
            }
        },
        "from":0,
        "size":10
    }
  2.  
  3. 错误信息:
    {
        "error":{
            "root_cause":[
                {
                    "type":"parsing_exception",
                    "reason":"[terms] query does not support [lang]",
                    "line":1,
                    "col":93
                }
            ],
            "type":"parsing_exception",
            "reason":"[terms] query does not support [lang]",
            "line":1,
            "col":93
        },
        "status":400
    }

其实这么看上去好像并没有什么问题,但是就是查询不成功。

问题出在查询lang这个字段上。

在查询的字段只有一个值的时候,应该使用term而不是terms,在查询字段包含多个的时候才使用terms(类似于sql中的in、or),使用terms语法,JSON中必须包含数组。

正确的写法如下:

  1. 第一种(单个值,term):
  2. {
  3. "query":{
  4. "bool":{
  5. "must":[
  6. {
  7. "range":{
  8. "update_time":{
  9. "gt":""
  10. }
  11. }
  12. },
  13. {
  14. "term":{
  15. "lang":
  16. }
  17. },
  18. {
  19. "terms":{
  20. "domain":[
  21. "dailymasala.co",
  22. "goldenmob.com"
  23. ]
  24. }
  25. },
  26. {
  27. "prefix":{
  28. "user_id":"errVideo_setInterval_"
  29. }
  30. }
  31. ]
  32. }
  33. },
  34. "from":,
  35. "size":
  36. }
  37.  
  38. 第二种(数组形式,terms):
  39. {
  40. "query": {
  41. "bool": {
  42. "must": [
  43. {
  44. "range": {
  45. "update_time": {
  46. "gt": ""
  47. }
  48. }
  49. },
  50. {
  51. "terms": {
  52. "lang": []
  53. }
  54. },
  55. {
  56. "terms": {
  57. "domain": [
  58. "dailymasala.co",
  59. "goldenmob.com"
  60. ]
  61. }
  62. },
  63. {
  64. "prefix": {
  65. "user_id": "errVideo_setInterval_"
  66. }
  67. }
  68. ]
  69. }
  70. },
  71. "from": ,
  72. "size":
  73. }

ElasticSearch搜索term和terms的区别的更多相关文章

  1. 看完这篇还不会 Elasticsearch 搜索,那我就哭了!

    本文主要介绍 ElasticSearch 搜索相关的知识,首先会介绍下 URI Search 和 Request Body Search,同时也会学习什么是搜索的相关性,如何衡量相关性. Search ...

  2. 一次 ElasticSearch 搜索优化

    一次 ElasticSearch 搜索优化 1. 环境 ES6.3.2,索引名称 user_v1,5个主分片,每个分片一个副本.分片基本都在11GB左右,GET _cat/shards/user 一共 ...

  3. ElasticStack学习(六):ElasticSearch搜索初探

    一.ElasticSearch搜索介绍 1.ElasticSearch搜索方式主要分为以下两种: 1).URI Search:此种查询主要是使用Http的Get方法,在URL中使用查询参数进行查询: ...

  4. elasticsearch 搜索提示DSL

    1,创建mapping: PUT /news_website { "mappings": { "news" : { "properties" ...

  5. Elasticsearch搜索资料汇总

    Elasticsearch 简介 Elasticsearch(ES)是一个基于Lucene 构建的开源分布式搜索分析引擎,可以近实时的索引.检索数据.具备高可靠.易使用.社区活跃等特点,在全文检索.日 ...

  6. ElasticSearch搜索介绍四

    ElasticSearch搜索 最基础的搜索: curl -XGET http://localhost:9200/_search 返回的结果为: { "took": 2, &quo ...

  7. Elasticsearch搜索调优权威指南 (2/3)

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/AAkVdzmkgdBisuQZldsnvg 英文原文:https://qbox.io/blog/el ...

  8. Es学习第七课, term、terms、match等基本查询语法

    term.terms查询 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查询某个字段里含有某个 ...

  9. elasticsearch中query和filter的区别

    参考博客来自: https://mp.weixin.qq.com/s/tiiveCW3W-oDIgxvlwsmXA?utm_medium=hao.caibaojian.com&utm_sour ...

随机推荐

  1. 二分法 Binary Search

    二分法还是比较常见和简单的,之前也遇到过一些二分的相关题目,虽然不难,但是每次都需要在边界问题上诸多考虑,今天听了九章算法的课程,学习到一种方法使得边界问题简单化. 二分法的几个注意点: 1. mid ...

  2. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  3. [已解决]Argument list too long如何处理?

    Argument list too long 本质是需要处理的长度超过系统的长度,因此无法执行相关命令. 经过搜索发现了两种方法,思想都是将参数切分成小的段落进行执行. 法一:通过xargs传递参数 ...

  4. File IO(NIO.2):文件操作

    简介 Files类是java.nio.file包的另一个主要入口点.该类提供了一组丰富的静态方法,用于读取,写入和操作文件和目录.Files方法适用于Path对象的实例.在进行其余部分之前,您应该熟悉 ...

  5. xml读取 避开并发(xml的一些操作)

    很多地方读取文件可能会出现并发现象 处理: 使用FileMode.Open, FileAccess.Read, FileShare.ReadWrite 避开并发 public static List& ...

  6. Nature Reserve

    Nature Reserve time limit per test:2 seconds memory limit per test:256 megabytes input:standard inpu ...

  7. bzoj 2741 [FOTILE模拟赛] L

    Description 多个询问l,r,求所有子区间异或和中最大是多少 强制在线 Solution 分块+可持久化trie 1.对于每块的左端点L,预处理出L到任意一个i,[L,j] 间所有子区间异或 ...

  8. linux之awk手册

    awk 手册   原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...

  9. *UOJ#223. 【NOI2016】国王饮水记

    $n \leq 8000$的数列,问不超过$m \leq 1e9$次操作后第一个数字最大是多少.操作:选一些数,把他们变成他们的平均值.需要保留$p \leq 3000$位小数,提供了一个小数高精度库 ...

  10. JS读取/创建本地文件及目录文件夹的方法

    原文链接:http://www.cnblogs.com/ayan/archive/2013/04/22/3036072.html 注:以下操作只在IE下有效! Javascript是网页制作中离不开的 ...