当查看索引里的数据,我们意识到一些奇怪的东西。
有些事情看起来有问题,我们在索引里有12个tweets,只有1个包含date 2014-09-15
现在让我们看看这些查询。
GET /_search?q=2014 # 12 results
GET /_search?q=2014-09-15 # 12 results !
GET /_search?q=date:2014-09-15 # 1 result
GET /_search?q=date:2014 # 0 results !
PS:如果你看了上一篇文章,你就知道哪个查询用了_all字段,哪个查询没有用这个字段。
为什么会有这些差别?
可能是因为_all索引数据的方式不同于date字段索引数据的方式。
让我们看一看es如何解释我们的文档结构,这是通过请求gb索引的tweet type的mapping信息。
GET /gb/_mapping/tweet
结果如下:
{
"gb"
: {
"mappings"
: {
"tweet"
: {
"properties"
: {
"date"
: {
"type"
:
"date"
,
"format"
:
"dateOptionalTime"
},
"name"
: {
"type"
:
"string"
},
"tweet"
: {
"type"
:
"string"
},
"user_id"
: {
"type"
:
"long"
}
}
}
}
}
}
es已经为我们自动创建了mapping.当然,这是它自己猜测的。
响应告诉我们date域已经被识别为date类型,
_all字段没有提及是因为它是一个默认字段,当然了,我们知道_all字段是string类型。
这样,日期类型的字段和字符串类型的字段的索引方式是不同的,因为寻找过程也是不同的。
一点也不奇怪。
也许,你希望核心类型:strings,number,booleans,dates都以不同的方式索引,而且事实上,它们之间确实有细微差别。
但是,目前为止,最大的差别在于表示具体值的字段和表示全文的字段之间。
这个区别很重要,这是es跟其它数据的区别之一。
http://my.oschina.net/qiangzigege/blog/264662
数据类型可以分为2类:具体值和全文。
具体值,比如说日期或者一个用户ID,也可以包括具体的字符串比如用户名或者邮箱。
具体值
"Foo"
与具体值
"foo"
不同.
具体值2014 与具体值2014-09-15也不同.
全文,引用文本内容,比如tweet的文本或者email的内容。
全文通常理解为非结构化数据,问题是:自然语言的规则复杂,计算机难以解析,比如,考虑到以下句子:
May is fun but June bores me.
这是说月份还是人?
具体值就容易查询,一个值要么匹配查询要么不匹配。
用SQL表达如下:
WHERE name =
"John Smith"
AND user_id = 2
AND
date
>
"2014-09-15"
查询全文的数据就更微妙,
我们不仅仅问文档是否匹配查询,还要知道文档与查询有多匹配,
换句话来说,相关度如何?
很少情况下,我们想完全匹配文本段,而是在文本域里搜索,我们还希望搜索能够理解我们的意图。
一个针对于
"UK"
的搜索应该可以返回包含
"United Kingdom"
的文档。
一个针对于
"jump"
的搜索应该匹配
"jumped"
,
"jumps"
,
"jumping"
或许甚至匹配
"leap"
"johnny walker"
应该匹配
"Johnnie Walker"
,
"johnnie depp"
应该匹配
"Johnny Depp"
。
"fox news hunting"
应该返回跟
"hunting on Fox News"
有关的故事,
"fox hunting news"
应该返回
"news stories about fox hunting"
有关的。
为了让这些全文字段的搜索便利,es首先分析文本,然后使用结果来建立倒排索引,
我们将讨论倒排索引和分析过程。
http://my.oschina.net/qiangzigege/blog/264761
相关推荐
内容概要:本文详细介绍了Elasticsearch的数据映射和类型,涵盖了核心概念、工作原理、映射的基础与类型详解、动态映射、动态模板、映射元数据以及索引的最佳实践。通过具体示例,解释了如何创建索引、定义映射、...
文章目录简介示例注意事项 ...#给example索引添加字段映射,默认docs类型 PUT example/docs/_mapping { properties: { id:{ type:long }, name:{ type:keyword }, age:{ type:integer },
而标题中提到的"一款基于Java注解的elasticsearch mapping生成工具",正是针对这一需求,为开发者提供了一种简洁且高效的方式来创建和管理ES的映射。 **Java注解与Elasticsearch Mapping** Java注解是一种元数据,...
本文将深入探讨如何利用ArcGIS桌面工具将矢量数据(如.shp文件)导入到Elasticsearch(ES)中,以便进行高效的数据存储、检索和分析。 首先,ArcGIS桌面软件提供了丰富的地理数据处理功能,其中包括支持多种矢量...
5. **动态映射**:Elasticsearch支持动态字段映射,意味着可以自动识别新添加字段的数据类型,无需预先定义。 6. **多租户**:一个Elasticsearch实例可以支持多个索引,每个索引有自己的设置和映射,实现资源隔离。...
Elasticsearch.NET是Elastic官方提供的.NET低级别客户端,而Nest则是其高级别、类型安全的客户端,提供了一种更接近C#的对象模型来操作Elasticsearch。通过这两个库,开发者可以更加便捷地在.NET Core应用中使用...
此外,工具类实现了对Elasticsearch的映射功能,即将POJO(Plain Old Java Object)的结构导入Elasticsearch。这一过程通常涉及到序列化和反序列化,确保Java对象和JSON文档之间的转换顺利进行。例如,使用Jackson库...
可以在创建索引时指定初始映射,也可以后续通过发送 PUT 请求至 `/索引名/_mapping/类型名` 来添加新的映射或更新现有类型映射。但请注意,无法修改已有字段的映射。如果需要改变字段的映射方式,必须重新创建索引或...
在6.8.0版本中,Elasticsearch 提供了强大的索引管理和查询功能,支持多种数据类型,如文本、数值、日期等。此版本对性能进行了优化,增强了稳定性,并修复了一些已知问题。它还支持多租户,允许在一个集群中管理多...
BigDesk Plugin 提供节点的实时状态监控,Elasticsearch Head Plugin 是一个客户端工具,Kibana 是 ES 官方推荐的数据报表和搜索工具。 七、ES 自动映射的规则? ES 映射是用于确定字段类型,将新增的每个字段数据...
动态映射是指在文档写入 Elasticsearch 时,会根据文档字段自动识别类型,而静态映射是指事先定义好映射,包含文档的各个字段及其类型等。 三、文档 文档是用来搜索的数据,其中的每一条数据就是一个文档。 四、...
"es搜索引擎"标签进一步确认了我们正在处理一个与Elasticsearch相关的项目,Elasticsearch通常用于处理大规模数据的搜索和分析任务。 **文件名称列表详解:** 1. **.classpath** - 这是一个Eclipse项目文件,包含...
最后,`es`包可能是Elasticsearch相关的操作接口或抽象类,它们定义了与Elasticsearch交互的方法,如添加、更新、删除文档,以及查询等。例如: ```java public interface ElasticsearchRepository { void save...
用户需要确保MySQL中的数据类型与Elasticsearch的映射正确,以保证数据的一致性和可用性。 4. **全文搜索与分析**: 一旦数据被导入Elasticsearch,就可以利用其强大的全文搜索、聚合和分析功能进行复杂查询。...
**Elasticsearch-Head:一个强大的可视化界面** Elasticsearch-Head是一款专为Elasticsearch设计的开源可视化管理工具,它极大地简化了Elasticsearch集群的管理和监控工作。这款插件提供了一个直观、友好的用户界面...
Elasticsearch数据导出工具是一种高效实用的解决方案,它允许用户方便地从Elasticsearch(ES)集群中抽取数据,并将其导出到不同的目标,如MySQL数据库或本地文件系统。这款工具尤其适用于需要进行数据迁移、备份或...
es-mysql数据映射sql编写
### 索引构建秘籍:如何定义 Elasticsearch 中的映射? #### 一、映射的重要性 ...通过以上介绍,我们可以看到 Elasticsearch 提供了丰富的字段类型和属性选项,使得我们可以灵活地根据业务需求定制最适合的映射方案。