Elasticsearch-用于定义文档字段的核心类型-字符串类型

ES-用于定义文档字段的核心类型

ES中一个字段可以是核心类型之一,如字符串、数值、日期、布尔型,也可以是一个从核心类型派生的复杂类型,如数组。

字符串类型

索引一类型为字符串的数据
doc1:

FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT ‘localhost:9200/music/album/2‘ -d ‘{
> "name":"Late Night with Elasticsearch",
> "date":"2019-06-24T22:17"
> }‘

doc2:

FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT ‘localhost:9200/music/album/3‘ -d ‘{
> "name":"latenight",
> "date":"2019-06-24T22:20"
> }‘

在name字符串字段里搜索单词late

FengZhendeMacBook-Pro:bin FengZhen$ curl -XGET ‘localhost:9200/music/album/_search?pretty‘ -d ‘{
>  "query":{
>     "query_string":{
>       "query":"late"
>     }
>  }
>  }‘
{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.095891505,
    "hits" : [ {
      "_index" : "music",
      "_type" : "album",
      "_id" : "2",
      "_score" : 0.095891505,
      "_source" : {
        "name" : "Late Night with Elasticsearch",
        "date" : "2019-06-24T22:17"
      }
    } ]
  }
}

索引过程和搜索过程如下

当索引"name":"Late Night with Elasticsearch"时,默认的分析器将所有字符转化为小写,然后将字符串分解为单词。
分析过程中生成了4个词条,即late、night、with和elasticsearch。查询的字符串经过同样的处理过程,”late”生成了同样的字符串”late”。因为查询生成的late词条和文档生成的late词条匹配了,所以文档(doc1)匹配上了搜索。doc2没有命中的原因是:在索引latenight时,默认的分析器只创建了一个词条--latenight。
一个词条是文本中的一个单词,是搜索的基本单位。在不同的情景下,单词可以意味着不同的事物,例如,它可以是一个名字,也可以是一个IP地址。如果只想严格匹配某个字段,应该将整个字段作为一个单词来对待。
映射会对这种分析过程起到作用。可以在映射中指定许多分析的选项。例如,可以配置分析,生成原始词条的同义词,这样同义词的查询同样可以匹配。
在设置映射时,有个index选项,可选值有:analyzed(默认)、not_analyzed或no。
将album类型的name字段设置为not_analyzed,映射如下

 curl -XPUT ‘localhost:9200/music/_mapping/album‘ -d ‘{
     "album":{
        "properties":{
            "name":{
                "type":"string",
                "index":"not_analyzed"
            }
        }
    }
 }‘

index类型解释:

(1) analyzed:默认情况下,index会被设置为analyzed;分析器将所有字段转为小写,并将字符串分解为单词。当期望每个单词完整匹配时,可以使用此选项
如:期望通过”late”搜出"Late Night with Elasticsearch"
(2) not_analyzed:分析过程被忽略,整个字符串被当做单独的词条进行索引。当进行精准的匹配时,可使用此选项
如:期望通过”big data”搜出”big data”,通过”big”搜不出”big data”
(3) no : 如果设置为no,则索引过程会被略过,也没有词条产生,因此无法在那个字段上进行搜索。当无需在这个字段上搜索时,这个选项节省了存储空间,也缩短了索引和搜索的时间。

原文地址:https://www.cnblogs.com/EnzoDin/p/11080034.html

时间: 2024-10-12 07:35:05

Elasticsearch-用于定义文档字段的核心类型-字符串类型的相关文章

MongoDB 文档字段增删改

MongoDB 基于CRUD(create,read,update,delete)方式实现了对集合上的文档进行增删改查.对于集合上字段的增删改,可以使用set或者unset修改器来实现.也可以使用文档替换的方式来实现.本文主要描述集合上字段的增删改,以及基于选项upsert的更新. a.语法描述 db.collection.update( <query>,                  //查询或过滤条件 <update>,                 //修改器(被修改键

增删改查 elasticsearch中的文档API 的使用

文档为何物?一个对象 就相当于mysql的一个record记录 参考: http://www.learnes.net/data/README.html curl 192.168.100.10:9200?preety curl 192.168.100.10:9200/_count?pretty shell 中的curl的用法 -X 指定请求方法默认是  -XGET -i 返回数据的时候,也一并返回请求结果 -d 发送的数据 这个返回值意味着我们的索引请求已经被成功创建,其中还包含了_index,

定义文档兼容性,是浏览器兼容各个版本

简介 为了帮助确保您的网页在将来的 Internet Explorer 版本中具有一致的外观,Internet Explorer 8 引入了文档兼容性. 文档兼容性是对 Microsoft Internet Explorer 6 中引入的兼容性模式的扩展,使您可以选择 Internet Explorer 用于显示网页的特定呈现模式. 本文将说明文档兼容性的必要性,列出对近来的 Internet Explorer 版本可用的文档兼容性模式,并演示如何选择特定的兼容性模式. 了解文档兼容性的必要性

第10章 文档对象模型DOM 10.3 Element类型

Element 类型用于表现 XML或 HTML元素,提供了对元素标签名.子节点及特性的访问. 要访问元素的标签名,可以使用 nodeName 属性,也可以使用 tagName 属性:这两个属性会返回相同的值.如下所示: <div id="myDiv"></div> var div = document.getElementById("myDiv"); alert(div.tagName); //"DIV" alert(d

Abp中SwaggerUI的接口文档添加上传文件参数类型

在使用Swashbuckle上传文件的时候,在接口文档中希望看到上传控件,但是C#中,没有FromBodyAttribute这个特性,所以需要在运行时,修改参数的swagger属性. 首先看下,最终效果: 下面介绍实现. 实现原理,通过swagger提供的filter,找到action中带有SwaggerFileUpload特性的参数,然后给swagger operaion.parameters添加一个自定义的参数,即文件类型参数即可. (1)定义SwaggerFileUploadAttribu

第10章 文档对象模型DOM 10.2 Document类型

Document 类型 JavaScript 通过 Document 类型表示文档.在浏览器中, document 对象是 HTMLDocument (继承自 Document 类型)的一个实例,表示整个 HTML 页面.而且, document 对象是 window 对象的一个属性,因此可以将其作为全局对象来访问. Document 类型可以表示 HTML 页面或者其他基于 XML 的文档.不过,最常见的应用还是作为HTMLDocument 实例的 document 对象.通过这个文档对象,不

elasticsearch river 参数文档

JDBC River parameters Jörg Prante edited this page on 23 Jan 2014 · 3 revisions Pages 15 Home Bulk indexing How bulk indexing is used by the JDBC river JDBC plugin feeder mode as an alternative to the deprecated Elasticsearch River API JDBC River par

ElasticSearch中实现文档操作后立即被搜索到

ElasticSearch一般称为近实时的大数据处理引擎,为什么是近实时呢?原因是当我们提交索引数据时,实际上只是写到了Buffer里面,并不是立即可搜索的,最多需要等1秒才可搜索(index.refresh_interval由这个参数控制,可以通过动态API自定义设置,或在建索引时在settings里面设置),还有一点,当存在副本时,只保证主分片写入成功写入请求就会返回,此时搜索请求如果分配到了副本上,有可能是搜索不到的. 那怎么做到实时搜索呢,在Java的UpdateRequest.Inde

elasticsearch插入索引文档 对数字字符串的处理

对于字符串在搜索匹配的时候,字符串是数字的话需要匹配的是精准匹配,如果是部分匹配字符串的话,需要进行处理,把数字型字符串作为一个字符中的数组表示插入之后显示如下: 如果插入之后显示如画线部分的话,则表示精准匹配 在用clien的java api插入的时候: String json=null;            if (req.getTagId() != null) {            String[] test = req.getTagId().split(",");