精华内容
下载资源
问答
  • "bool":{//bool查询 联合查询 bool中所有字段指定的条件必须满足 bool字段中条件是与的关系 "must|must_not":[//must:必须 must中所有元素必须为true,must_not必须不 所有元素必须为false must和must_not中元素...
    GET /index_name/type_name/_search
    
    {
    
    "query":{ //查询必须有该属性
        "bool":{//bool查询 联合查询 bool中所有字段指定的条件必须满足 bool字段中条件是与的关系
            
            "must|must_not":[//must:必须 must中所有元素必须为true,must_not必须不 所有元素必须为false must和must_not中元素是与的关系,必须都为true才能返回true 以下等价于 field1 = 'xxx' and field2 between 2 and 3 must和must_not正好是反向关系 
                "match":{"field1":"xxx"},
                "range":{"field2":{"gte":2,"lte":3}},
                 ...
            ],
            "should":[//should:满足一个 或的关系,元素中有一个满足即可
                "term":{"field4":"xxx"},
                "match_phrase":{"field3":"xxx"},
                "minimum_should_match":2 //should中最少匹配两个
            ],
            "filter":{//对搜索出的结果按条件过滤 filter中的字段匹配不影响评分
                "match":{
                    "field1":"xxx"
                }
            },
            ...
            
        }
    
    },
    "sort":[ //对结果进行排序 可以多个字段联合排序
        "field1":"asc",
        "field2":"desc",
        ...
    ],
    "aggs":{ //聚合
        "aggs_name":{ //聚合的名称 任意取
            "sum|avg|min|max":{ //指标 支持累和 平均数 最小 最大 基数等等
                "field":"field_name" //需要进行聚合的字段名
            }
        }
    },
    "_source":[//查询指定字段
        "field1","field2"...
    ],
    "from":0, //分页开始下标
    "size":10//数据条数
    
    }
    
    
    层级结构:
    
    >query
        >match|term|terms|range|match_phrase|...
        >bool
            >must|must_not|should|filter...
                                      >match|term|terms|match_phrase|range...
    >sort|agg
    
    注意:query子节点bool 或match|term|terms.. 只能同时存在一个
    
    
    
    match子查询中会对搜索词进行分词,如果文档中匹配上了一个分词后的搜索词即会查询出。以下两个句子等价:
    {
        "query":{
            "match":{
                  "fieldname":"hello world"  
             }
        }
    }
    
    {
        "query":{
            "bool":{
                  "should":[
                        {"term":{"fieldname":"hello"}},
                        {"term":{"fieldname":"world"}}
                    ]
             }
        }
    }
    
    match匹配时默认是搜索词分词后匹配文档,多个分词之间是或的关系,可以修改为and的关系:
    {
        "query":{
            "match":{
                  "fieldname":{
                        "query":"hello world",
                         "operator":"and",   //默认是or
                         "boost":2 //设置匹配该查询后分数的权重
                    }
             }
        }
    }
     上述语句是查询filedname中有hello又有world的文档,等价于
    
    {
        "query":{
            "bool":{
                  "must":[
                        {"term":{"fieldname":"hello"}},
                        {"term":{"fieldname":"world"}}
                    ]
             }
        }
    }
    
    

     

     

     

    展开全文
  • ES搜索结果中各个字段介绍 转自 https://blog.csdn.net/qq_36868951/article/details/108127909 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索,它简单地返回集群中所有索引下的所有文档: GET /_search ...

    ES搜索结果中各个字段介绍

    转自 https://blog.csdn.net/qq_36868951/article/details/108127909

    空搜索

    搜索API的最基础的形式是没有指定任何查询的空搜索,它简单地返回集群中所有索引下的所有文档:

    GET /_search
    

    返回的结果(为了界面简洁编辑过的)像这样:

    {
       "hits" : {
          "total" :       14,
          "hits" : [
            {
              "_index":   "us",
              "_type":    "tweet",
              "_id":      "7",
              "_score":   1,
              "_source": {
                 "date":    "2014-09-17",
                 "name":    "John Smith",
                 "tweet":   "The Query DSL is really powerful and flexible",
                 "user_id": 2
              }
           },
            ... 9 RESULTS REMOVED ...
          ],
          "max_score" :   1
       },
       "took" :           4,
       "_shards" : {
          "failed" :      0,
          "successful" :  10,
          "total" :       10
       },
       "timed_out" :      false
    }
    

    hits

    返回结果中最重要的部分是hits,它包含total字段来表示匹配到的文档总数,并且一个hits数组包含所查询结果的前十个文档。所以hits其实就是你想查询的内容。可以在查询语句中添加size,获得更多的hits。

    在 hits 数组中每个结果包含文档的 _index_type_id,加上_source字段。这意味着我们可以直接从返回的搜索结果中使用整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你单独去获取文档。

    每个结果还有一个 _score,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照 _score 降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果而言 1 是中性的_score

    max_score值是与查询所匹配文档的_score的最大值。

    took

    took 值告诉我们执行整个搜索请求耗费了多少毫秒。

    shard

    _shards部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。

    timeout

    timed_out值告诉我们查询是否超时。默认情况下,搜索请求不会超时。如果低响应时间比完成结果更重要,你可以指定 timeout 为 10 或者 10ms(10毫秒),或者 1s(1秒):

    GET /_search?timeout=10ms
    

    在请求超时之前,Elasticsearch 将会返回已经成功从每个分片获取的结果。

    应当注意的是 timeout 不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询即使是结果已经被发送了。

    使用超时是因为 SLA(服务等级协议)对你是很重要的,而不是因为想去中止长时间运行的查询。

    展开全文
  • ES搜索结果中各个字段介绍 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索,它简单地返回集群中所有索引下的所有文档: GET /_search 返回的结果(为了界面简洁编辑过的)像这样: { "hits" : { "total...

    ES搜索结果中各个字段介绍

    空搜索

    搜索API的最基础的形式是没有指定任何查询的空搜索,它简单地返回集群中所有索引下的所有文档:

    GET /_search
    

    返回的结果(为了界面简洁编辑过的)像这样:

    {
       "hits" : {
          "total" :       14,
          "hits" : [
            {
              "_index":   "us",
              "_type":    "tweet",
              "_id":      "7",
              "_score":   1,
              "_source": {
                 "date":    "2014-09-17",
                 "name":    "John Smith",
                 "tweet":   "The Query DSL is really powerful and flexible",
                 "user_id": 2
              }
           },
            ... 9 RESULTS REMOVED ...
          ],
          "max_score" :   1
       },
       "took" :           4,
       "_shards" : {
          "failed" :      0,
          "successful" :  10,
          "total" :       10
       },
       "timed_out" :      false
    }
    

    hits

    返回结果中最重要的部分是 hits ,它包含 total 字段来表示匹配到的文档总数,并且一个 hits 数组包含所查询结果的前十个文档。

    hits 数组中每个结果包含文档的 _index_type_id ,加上 _source 字段。这意味着我们可以直接从返回的搜索结果中使用整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你单独去获取文档。

    每个结果还有一个 _score ,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照 _score 降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果而言 1 是中性的 _score

    max_score 值是与查询所匹配文档的 _score 的最大值。

    took

    took 值告诉我们执行整个搜索请求耗费了多少毫秒。

    shard

    _shards 部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。

    timeout

    timed_out 值告诉我们查询是否超时。默认情况下,搜索请求不会超时。如果低响应时间比完成结果更重要,你可以指定 timeout 为 10 或者 10ms(10毫秒),或者 1s(1秒):

    GET /_search?timeout=10ms
    

    在请求超时之前,Elasticsearch 将会返回已经成功从每个分片获取的结果。

    应当注意的是 timeout 不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询即使是结果已经被发送了。

    使用超时是因为 SLA(服务等级协议)对你是很重要的,而不是因为想去中止长时间运行的查询。

    展开全文
  • Elasticsearch(es)使用termQuery()不能正确搜索字段内的值 最近在使用es的过程中,发现了一个问题:使用termQuery搜索String类型的字段,无法成功匹配到对应的值。文章的前半部分是重现这个问题,想跳过看解决办法...

    Elasticsearch(es)使用termQuery不能正确搜索到字段内的值

    最近在使用es的过程中,发现了一个问题:使用termQuery搜索String类型的字段,无法成功匹配到对应的值。文章的前半部分是重现这个问题,想跳过看解决办法的,请直接进入后半部分。

    以下所有内容基于es版本为7.4而作。

    问题复现

    1. 首先构建一个索引。
      创建索引

    2. 向索引中添加4条document。
      插入数据

    3. 上图可以看出,已经成功添加了四条记录了。我们先使用match去搜索数据,可以发现搜索结果符合预期(其余两条我隐藏了,否则截图放不下)。

    match

    1. 接下去使用termQuery搜索。我们对 address 字段执行termQuery,搜内容为 “杭州西湖”,预期结果应该能搜到 id = 3, address="杭州西湖"的那条记录。但是结果如下,搜索结果为空。

      term

    原因分析

    为什么会发生上面的这种情况呢?

    text & keyword

    首先我们看下当前的index的信息
    info

    我们可以看到,在没有设置mapping的情况下,es自动帮我们识别了插入数据的类型,address被识别成了text类型,且附带了keyword的子字段。

    关于textkeyword的区别,我抄了段官网的说法

    Text field type
    A field to index full-text values, such as the body of an email or the description of a product. These fields are analyzed, that is they are passed through an analyzer to convert the string into a list of individual terms before being indexed. The analysis process allows Elasticsearch to search for individual words within each full text field. Text fields are not used for sorting and seldom used for aggregations (although the significant text aggregation is a notable exception).

    If you need to index structured content such as email addresses, hostnames, status codes, or tags, it is likely that you should rather use a keyword field.

    Keyword type family

    Keyword fields are often used in sorting, aggregations, and term-level queries, such as term.

    大致翻译一下,就是前者是分词的,可以用于文本搜索;后者是不分词的,一般就用于精准匹配。

    照这么说,我们使用termQuery,搜索词为 “杭州西湖” 时,应该能搜索到id = 3, address="杭州西湖"这条数据啊。又发生了什么导致了搜索不到呢?

    analyze

    上面说到了address字段会被分词处理,我们看看在不指定分词器的情况下,使用默认分词器,存入数据后,会被分词处理成什么。

    analyze

    如图,存入中文后,每个字都会被拆开,所以我们在搜索"杭州西湖"的时候,并没有对应的数据能匹配上,自然就搜索不出结果了。此时想要搜索到,应该搜这四个字中的任意一个字,都能得到搜索结果,但得到的搜索结果并不是我们想要的精确匹配啊?如何才能在搜索中文时,精确匹配的搜索到想要的内容呢?

    解决办法

    方案一:不破坏es帮我们自动生成的mapping,我们使用其中的keyword去做匹配

    我们上面在介绍address被识别成text类型,还说到了附带了keyword的子字段。而keyword是不会分词的,那么可以利用这个附带的keyword的子字段来实现精确匹配。

    keyword term query

    方案二:手动设置mapping,让我们要搜索的字段不分词处理

    上面说到了未设置mapping的情况下,es自动帮我们识别了各个字段的类型,生成了mapping,其实我们也可以手动干预生成mapping这件事,我们指定address字段类型为keyword

    我们是否可以更新刚才这个 indexmapping来实现我们要的目的呢?官网给出了这样的回答

    Update the mapping of a field

    Except for supported mapping parameters, you can’t change the mapping or field type of an existing field. Changing an existing field could invalidate data that’s already indexed.

    If you need to change the mapping of a field in a data stream’s backing indices, see Change mappings and settings for a data stream.

    If you need to change the mapping of a field in other indices, create a new index with the correct mapping and reindex your data into that index.

    Renaming a field would invalidate data already indexed under the old field name. Instead, add an alias field to create an alternate field name.

    也就是说,对于已经存在的mapping,是无法直接更改的,我们应该新建一个index并设置好mapping
    set mapping

    展开全文
  • 在all-field字段中,我们解释过_all字段的索引方式是将所有其他字段的值作为一个大字符串索引的。然而这么做并不十分灵活,为了灵活我们可以给人名添加一个自定义_all字段,再为地址添加另一个_all字段。 Elastic...
  • [Java] ES获取数据部分字段

    千次阅读 2016-05-05 18:08:11
    在ES中如何获取部分字段值,在默认情况下,ES搜索出来是source的全部字段,但有时候我们并不想获取全部字段数据,比如在开发中,我们的index中有几十个字段,每天好几十G的数据,全部返回量太大。 要获取指定字段的...
  • es搜索

    2019-03-06 17:59:00
    地图搜索实现: ①参数:  左下角经纬度和右上角经纬度 ...用es作为关系库,首先先mapping所有字段,然后用laravel命令把数据库中的数据导入到es中  b.收集前台参数  1.在矩形中查找: $es_...
  • logstash配置,之前映射添加后不不能拆分字段所有接受的日志文本都入到一个message字段中, 反复尝试了4天左右都找不到原因,我觉得字段拆分是mapping负责的,这个技术研究都有点绝望了。在网上搜索 我看到文章中...
  • 1 介绍 ... 2 查询所有文档 match_all 在索引中查询所有文档 2.1 GET查询 GET /search_demo/_doc/_search 2.2 POST查询 ..._source : 可以指定要查询的字段列,不指定的默认查询所有 { "query": {
  • 在元数据:_all字段中,我们解释了特殊的_all字段会将其它所有字段中的值作为一个大字符串进行索引。尽管将所有字段的值作为一个字段进行索引并不是非常灵活。如果有一个自定义的_all字段用来索引人名,另外一个...
  • es搜索核心与实战 Day01 文档 Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位 日志文件中的日志项 ​ 一本电影的具体信息 / 一张唱片的详细信息 ​ MP3播放器里的一首歌 / 一篇PDF文档中的具体内容 ...
  • ElasticSearch查询实现全字段搜索

    千次阅读 2020-12-23 09:26:17
    需求:对导入到ES数据库的数据字段实现全字段的搜索。 对于电商或者互联网,ES...这个查询构造器转换成的查询语句查询时,会将对应索引的所有字段添加到一个字段里,最后查询这个字段。 方法二、 当然,还有一种方法,
  • 文章目录单字符串多字段的查询和DisMaXQuery单字符串的多字段搜索解决:Disjunction Max Query 最佳匹配最佳字段调优相关阅读 单字符串多字段的查询和DisMaXQuery 单字符串的多字段搜索 在本例中,文档2出现了 ...
  • java ES 线点搜索

    2020-09-02 16:49:26
    今天用到了ES搜索中的线点搜索。下面说一下线点的使用与配置,搜索参数规则与solr搜索规则一样,稍后也说一下。最后说一下java调取获取数据。 1、线点搜索使用 先创建一个视图 然后在线点平台建一个索引表 ...
  • 默认情况下,完整的JSON文档将作为所有搜索的一部分返回。这称为源(搜索命中的_source字段)。如果我们不希望返回整个源文档,则可以只请求返回源中的少数几个字段 GET /bank/_search { "query": { "match_all": ...
  • 如果搜索字段远小于显示字段,比如搜索字段为3个,显示字段有20个,这个时候用第一种方法好。es+hbase,一般这样搭配。 如果搜索字段跟显示字段接近,或者一条【行记录】的数据量并不大,这个时候用第二种方法好。 ...
  • es(五—)——搜索

    2019-07-31 18:29:26
    最基本的搜索API表单是空搜索(empty search),它没有指定任何的查询条件,只返回集群索引中的所有文档: 2. 响应内容 上面的响应内容(为了编辑简洁)类似于这样: 2.1 hits 响应中最重要的部分是 hits ,...
  • // 查找所有数据 GET 索引/类型/_search { "query": { "match_all": {} } } // 查找数据字段 GET /ecommerce/product/_search { "query": { "match_all": {} }, "_source": ["name", "price"] } // 查找具体...
  • es

    2020-09-15 21:33:43
    •分布式(准)实时搜索引擎,每个字段都被索引并可被搜索 •分布式(准)实时分析工具,聚合功能可以构建复杂数据摘要 开箱即用。安装好ElasticSearch后,所有参数的默认值都自动进行了比较合理的设置,基本不需要...
  • 2.过滤显示指定字段 3.根据指定的条目排序 4.分页 注:数据下标也是从0开始的。 5.布尔过滤 must(and),所有的条件都要符合 should(or),符合一个条件即可 must_not(not),必须不,排除指定条件的 多条件...
  • ES检索实例

    2021-01-17 19:20:32
    搜索所有带林字的精确匹配 GET /test/_doc/_search { "query": { "match": { "label": "森" } } } 过滤结果字段 在示例1的结果中会默认查询出文档类的所有字段, 可以通过添加_source来过滤结果集. 下面的...
  • ES基本概念

    2019-09-27 00:52:08
    1. 文档(Document) ES面向文档,文档是所有搜索数据的最小单元。 理解成关系新数据库中的一条数据。 文档会被序列化成JSON格式,保存在ES中: JSON对象有字段组成,每个字段都有对应的字段类型(字符串/数值/...
  • 时间相关的字段是ElasticsSearch(以下简称ES)最常用的字段了,几乎所有的索引应用场景都会有时间字段,一般用于基于时间范围的搜索,聚合等场景。但是由于时区的问题,相信很多小伙伴都踩到过时间字段的坑,笔者...
  • Es-Search Api 详解

    2019-01-13 13:14:20
    URI-Search ...df q中不指定字段时默认查询的字段,如果不指定, es会查询所有字段 sort排序 timeout指定超时时间,默认不超时 from,size用于分页 Query String Syntax term与phrase alfred wa...
  • es学习笔记

    2021-01-05 19:06:22
    想聊es的search必须先知道这三个东西! 映射(Mapping) 描述数据在每个字段内如何存储 分析(Analysis) 全文是如何处理使之可以被搜索的 领域特定查询语言(Query DSL) Elasticsearch 中强大灵活的查询语言 查询...
  • ES排序

    2020-04-26 15:52:50
    排序 为了按照相关性来排序,需要将相关性表示为一个数值。在 Elasticsearch 中, 相关性得分 由一个浮点数进行表示,...例如,下面的查询返回所有 user_id 字段包含 1 的结果: GET /_search { "query" : { "bool...
  • 4.es所有字段设置为关键字-keyword类型 5.每条数据包含三个关键数据,原始值,新值,和这一行数据的所有值的json数据 6.要实现对字段的过滤以及搜索的关键在于字段是keyword类型,可以实现多条件多字段的大数据量...
  • 所有条目都将由使用映射中的_kas_key字段提供的_key参数过滤... <SERVER> / _kas / <INDEX> _key =? <KEY> [&_fields = <FIELDS> &_limit = <SIZE> &_offset = <OFFSET> &_sort = +|-<SORT> &_filter = ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 129
精华内容 51
关键字:

es搜索所有字段