在Elasticsearch创建mapping的时候,需要制定store属性和index属性,对于刚入门es的学者,通常对lucene又不熟悉的人,通常不知道如何设置这两个值。
先来看需求:
在做搜索时,经常会需要对一个分类进行分组,比如搜索"ipad",需要在平板电脑分类下面统计有多少个商品,在电脑配件下面统计有多少个商品,这种统计数量的需求,我们通常会在document里面添加一个分类ID,然后对所有的分类做facet。那么问题出来了,如果分类ID是个整数的话,store属性应该设置true or false?这种整数是否还需要索引?
这个问题,在ES的文档中怎么也找不到,个人一开始又对lucene不熟悉,所以花时间看了一下lucene。通过学习lucene及实际的实践得出,以上需求的设置store应该为no,而index应该设置为not_analyzied。
下面我们来仔细理解一下这两个设置项。
其中index的含义还比较容易理解,一共3个值,no,analyzied,not_analyzied,分别对应'不对该字段进行索引(无法搜索)','分词后索引','以单个关键词进行索引'。就是说,如果这个字段不需要搜索,一般不需要设置为analyzied,但是如果不搜索,针对以上的需求,index应该设置为no吗?请继续往下看。
通常分类在索引的时候都是一个整数或长整数,对应lucene的IntField或LongField,而这两个类在lucene中的第一行注释是:Field that indexes
int
values for efficient range filtering and sorting.(Field that indexes long
values for efficient range filtering and sorting),也就是说,IntField是被索引的,并且这种索引在范围过滤和排序的时候性能非常高。那么问题就很明确了,因为,我们的分类字段也是作为filter项的,因此如果要做过滤,必须进行索引。否则可能无法作为过滤条件。实际上,我们在创建mapping的时候,如果设置了数据类型为integer,其他的都未指定,默认的index即为no_analyzied。至于store,采用默认值也是合适的(默认为no),实际上这些默认值都是lucene的默认值。因为一般我们是用不到store='yes'的功能的,除非,我们需要对某个域(就是字段)进行高亮显示。
你可能会问,如果设置store:"no",会不会影响facet的性能。答案为不会,因为做facet的时候并不会使用store的字段,而是使用的索引表的词。也就是后面设置的index:'not_analyzied"。
我自己做过一个测试,如果设置分类ID不索引,则无法进行facet,可见任何需要facet的字段,必须进行索引。
请支持原创:
http://donlianli.iteye.com/blog/1975727
对这类话题感兴趣?欢迎发送邮件至donlianli@126.com
关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。
更多我之前的文章,可以访问 我的空间
相关推荐
这种现象表明,当_source字段被开启后,字段的store属性对于查询结果的影响更为复杂。 #### 五、结论 通过对_source字段与字段store的探讨以及实例验证,我们可以得出以下结论: 1. **性能权衡**:根据应用需求...
- **Store属性**:讨论了文档存储的相关属性及其作用。 - **Querytype详解**:详细解释了Elasticsearch中的不同查询类型及其适用场景。 - **0.90.x升级至1.x后问题**:列出了从早期版本升级到1.x版本时可能遇到的...
在现代数据处理和分析领域,Elasticsearch(ES)扮演着至关重要的角色,它是一个开源的、分布式搜索引擎,适用于实时数据分析和全文检索。随着版本的不断更新,Elasticsearch提供了更丰富的功能和优化,5.2.0版本便...
在IT行业中,Elasticsearch是一个广泛使用的开源搜索引擎和分析引擎,尤其在大数据处理和实时分析领域扮演着重要角色。在安全通信方面,SSL/TLS(Secure Sockets Layer/Transport Layer Security)是网络通信中保障...
总之,正确理解和定义 Elasticsearch 中的映射对于实现高效的数据搜索和分析至关重要。通过以上介绍,我们可以看到 Elasticsearch 提供了丰富的字段类型和属性选项,使得我们可以灵活地根据业务需求定制最适合的映射...
尽管有这些局限性,这个简单的ES5Map实现仍然能提供基本的键值对存储功能,对于学习和理解`Map`的概念很有帮助。在实际开发中,当环境支持ES6及以上版本时,应优先使用原生的`Map`对象,以获得更好的性能和功能。 ...
通过"pet-store-tests-master"这个压缩包,你可以学习到如何在TypeScript环境中设置测试环境,编写和执行测试,以及理解和解决测试中出现的问题。这是一个极好的实践平台,帮助你提升在TypeScript和软件测试领域的...
ES7(即ES2016)引入了一些新特性,如类属性和解构赋值,这些在React组件中特别有用。`react snippets`可能包含了一些预定义的React组件模板,帮助开发者快速创建新组件。 2. **Redux**: Redux是一个专门为React...
Vue 3.x 版本引入了诸多改进和优化,而Vite则是一个由Vue.js作者尤雨溪发起的新一代前端构建工具,它基于ES模块,提供了更快的开发环境启动速度和更便捷的热更新机制。Vue3.x与Vite的结合使用,为开发者带来了更加...
如果你的应用有多个`actions`需要传递多个参数,可以考虑创建一个标准的payload格式,以便更好地组织和理解代码。 3. **使用对象的嵌套属性**:如果你的参数有层级关系,可以在对象中嵌套其他对象,然后在`action`...
在ExtJS中,使用`Ext.data.Store`对象来管理数据,你需要定义一个`proxy`属性,设置为`Ext.data.HttpProxy`,并指定URL为你的服务器端接口地址。 2. **模型定义**: 在ExtJS 3中,使用`Ext.data.Record`来定义数据...
这个教学项目是针对那些希望深入理解TypeScript和高级编程技巧的DavyCode学员。 TypeScript是一种强类型、面向对象的JavaScript超集,它提供了诸如接口、类、枚举等特性,使得代码更加健壮和易于维护。在"ts_store...
CQRSShop是一个基于CQRS(命令查询责任分离)和事件溯源原则的示例项目,它利用了EventStore作为事件存储、Elasticsearch用于数据检索和Neo4j作为图形数据库。这个项目旨在展示如何在实际应用中实现这些高级设计模式...
1. **分布式索引**:利用Lucene的分布式索引库,如Solr或Elasticsearch,实现大规模数据的高效检索。 2. **性能调优**:通过调整索引策略、缓存配置、分析器设置等,提升搜索性能。 3. **实时索引**:结合...
你需要理解HTML5的元素和属性,以及CSS的选择器、布局模式(如盒模型、Flexbox或Grid)、响应式设计和CSS预处理器(如Sass或Less)。 4. **AJAX**或**Fetch API**:用于异步从服务器获取或发送数据,这通常用于更新...
与Vuex相比,Pinia的API更加直观,例如使用`defineStore`定义商店,`state`定义状态,`getters`获取计算属性,`actions`处理异步操作,以及`setup`中的`useStore`来注入并访问store。 4. **Element Plus**:Element...
3. **字段与类型**:理解Document中的Field,如TextField、KeywordField、Store和Indexed等属性的含义,以及它们在索引和查询时的影响。 4. **倒排索引**:了解Lucene的核心机制——倒排索引,它是如何快速定位到...
### ElasticSearchServer扩展的弹性搜索解决方案 ...以上是对 ElasticSearchServer 扩展的弹性搜索解决方案的关键点进行了详细的解释和示例演示,希望有助于理解和掌握 ElasticSearch 的高级特性及其应用场景。
它提倡单向数据流,即数据从服务器流向视图,然后通过动作(Actions)传递到存储(Store),最后更新视图。这种模式避免了复杂的双向绑定和深层嵌套的回调函数,使应用更易于理解和调试。在“react-flux-es5”项目中...