一篇就懂 Elasticsearch 原力计划
作者 | mr_xinchen
来源 | CSDN博客
出品 | CSDN(ID:CSDNnews)
Elasticsearch介绍
Elasticsearch是一款基于Lucene的分布式全文检索服务器,让我们看一下百度文库给出的解释。
用途 :做搜索功能使用案例 :GitHub、维基百科、等等Solr对比:
实时性ES高于Solr
Solr传统搜索性能高于ES
Elasticsearch安装
注意:安装必须在java1.8版本以上Windows环境
去官网下载获得压缩包一个,版本6.2.4
解压缩进入目录找到bin文件夹
双击运行bin文件夹中elasticsearch.bat脚本
在浏览器输入http://localhost:9200/
安装成功浏览器显示
Linux环境
1. 安装和配置
我们将在linux下安装Elasticsearch,使用版本6.2.4
2. 新建一个用户
出于安全考虑,elasticsearch默认不允许以root账号运行。
创建用户:
1useradd 用户名
设置密码:
1passwd 用户名
切换用户:
1su 用户名
3. 上传安装包,并解压
我们将安装包上传到:/home/用户名目录
解压缩:
1tar -zxvf elasticsearch-6.2.4.tar.gz
我们把目录重命名:
1mv elasticsearch-6.2.4/ elasticsearch
进入,查看目录结构:
1ls -l /home/用户名/elasticsearch
4. 修改配置
我们进入config目录:cd config
需要修改的配置文件有两个:
jvm.options
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数。
编辑jvm.options:
1vim jvm.options
默认配置如下:
1-Xms1g2-Xmx1g
内存占用太多了,我们调小一些:
1-Xms512m2-Xmx512m
elasticsearch.yml
1vim elasticsearch.yml
修改数据和日志目录:
1path.data: /home/用户名/elasticsearch/data # 数据目录位置2path.logs: /home/用户名/elasticsearch/logs # 日志目录位置
我们把data和logs目录修改指向了elasticsearch的安装目录。但是这两个目录并不存在,因此我们需要创建出来。
进入elasticsearch的根目录,然后创建:
1mkdir data2mkdir logs
修改绑定的ip:
1network.host: 0.0.0.0 # 绑定到0.0.0.0,允许任何ip来访问
默认只允许本机访问,修改为0.0.0.0后则可以远程访问
目前我们是做的单机安装,如果要做集群,只需要在这个配置文件中添加其它节点信息即可。
elasticsearch.yml的其它可配置信息:
5. 运行
进入elasticsearch/bin目录,可以看到下面的执行文件:
然后输入命令:
1./elasticsearch
发现报错了,启动失败:
错误1:内核过低
我们使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。不过没关系,我们禁用这个插件即可。
修改elasticsearch.yml文件,在最下面添加如下配置:
1bootstrap.system_call_filter: false
然后重启
错误2:文件权限不足
再次启动,又出错了:
1[1]: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
我们用的是普通用户,而不是root,所以文件权限不足。
首先用root用户登录。
然后修改配置文件:
1vim /etc/security/limits.conf
添加下面的内容:
1* soft nofile 6553623* hard nofile 13107245* soft nproc 409667* hard nproc 4096
错误3:线程数不够
刚才报错中,还有一行:
1[1]: max number of threads [1024] for user [leyou] is too low, increase to at least [4096]
这是线程数不够。
继续修改配置:
1vim /etc/security/limits.d/90-nproc.conf
修改下面的内容:
1* soft nproc 1024
改为:
1* soft nproc 4096
错误4:进程虚拟内存
1[3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
vm.max_map_count:限制一个进程可以拥有的VMA(虚拟内存区域)的数量,继续修改配置文件, :
1vim /etc/sysctl.conf
添加下面内容:
1vm.max_map_count=655360
然后执行命令:
1sysctl -p
6. 重启终端窗口
所有错误修改完毕,一定要重启你的 Xshell终端,否则配置无效。
7. 启动
进入elasticsearch/bin目录,然后输入命令:
1./elasticsearch
可以看到绑定了两个端口:
9300:集群节点间通讯接口
9200:客户端访问接口
我们在浏览器中访问:http://127.0.0.1:9200
Elasticsearch理论知识
看过我上篇Lucene的文章,大家知道我把Lucene和传统数据库对比,其实他们很多相同之处,接下来我们拿Elasticsearch和Mysql进行比较。
1Mysql -> database -> table -> rows -> columns23Elasticsearch -> index -> type -> documents -> fields
1. index(索引)
可以类似看成一个database,但区别于就是一个拥有几分相似特征的文档的集合,比如你可以有商品数据索引、或则客户数据索引。
2. type(类型)
可以类似看成一个table,就是给文档分分类用的,通常,会为具有一组共同字段的文档定义一个类型。
3. documents (文档)
可以类似看成一个table下一行数据, 一个文档是一个可被索引的基础信息单元。
4. fields(字段,在lucene中叫域)
可以类似看成一个table的字段,对文档数据根据不同属性进行的分类标识
5. mapping(映射)
可以类似看成字段的数据类型和约束,mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等
6. shards&replicas(分片&备份)
ES是分布式大数据量全文检索服务器,把文档数据切成片段,多个片合在一起是一个完整的数据。在分布式环境中很有就能出现单点故障问题,这时候需要备份每个片段会被复制和转移同步。
RESTfull语法
我这里使用kibana,也可以使用其他工具实现
1. 创建索引index和映射mapping
1PUT /索引名23{45 "mappings": {67 "type名": {89 "properties": {1011 "fields名": {1213 "type": "类型",1415 "store": 是否储存[true,false],1617 "index": 是否索引[true,false],1819 "analyzer":"分词器"2021 },2223 "fields名": {2425 "type": "text",2627 "store": true,2829 "index": true,3031 "analyzer":"standard"3233 }3435 }3637 }3839 }4041}
2. 创建索引index后添加映射mapping
1POST /索引名/type名/_mapping23{45 "type名":{67 "properties":{89 "fields名":{1011 "type":"long",1213 "store":true,1415 "index":false1617 },1819 "fields名":{2021 "type":"text",2223 "store":true,2425 "index":true,2627 "analyzer":"standard"2829 }3031 }3233 }3435}
3. 删除索引index
1DELETE /索引名
4. 添加文档document
1POST /索引名/type名/[_id]23{45"FIELD": "VALUE",67"FIELD": "VALUE",89"FIELD": "VALUE"1011}
5. 修改文档document
1和添加相同,并且_id存在
6. 删除文档document
1DELETE /索引名/type名/_id
7. 根据_id查询
1GET /索引名/type名/_id
8. 根据term查询
1POST /索引名/type名/_search23{45 "query": {67 "term": {89 "FIELD": "VALUE"1011 }1213 }1415}
9. 根据query_string查询
1POST /索引名/type名/_search23{45 "query": {67 "query_string": {89 "default_field": "FIELD",1011 "query": "this AND that OR thus"1213 }1415 }1617}
IK分词器
查看分词效果
1GET /_analyze23{45 "analyzer": "standard",67 "text":"VALUE"89}
集成IK分词器
下载IK分词器压缩包并解压缩
把其中elasticsearch文件夹改名ik-analyzer
把ik-analyzer文件夹放置在elasticsearch目录的plugins文件夹
重启elasticsearch服务器
测试分词器效果,把analyzer的值改成ik_smart 或 ik_max_word
Elasticsearch集群
这里ES集群相当简单,它不像solr需要一个注册中心,其实玩过分布式童鞋都知道,玩集群无非多开几个实例并用一个或多个注册中心管理起来。而ES集群模式使用一个 P2P类型(使用 gossip 协议)的分布式系统,说白了就是一个广播分布式系统。所以配置起来比外带注册中心简单。
1. cluster(集群)
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。
2. node(节点)
就是一个集群的服务器
3. shards&replicas(分片&备份)
准备多台ES服务器,修改elasticsearch-cluster\config\elasticsearch.yml配置文件
1#节点n的配置信息:23#集群名称,保证唯一45cluster.name: elasticsearch67#节点名称,必须不一样89node.name: node-11011#必须为本机的ip地址1213network.host: 127.0.0.11415#服务端口号,在同一机器下必须不一样1617http.port: 92001819#集群间通信端口号,在同一机器下必须不一样2021transport.tcp.port: 93002223#设置集群自动发现机器ip集合2425discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
JAVA客户端
7.1 创建Maven工程,导入坐标
1<dependencies>23 <dependency>45 <groupId>org.elasticsearch</groupId>67 <artifactId>elasticsearch</artifactId>89 <version>5.6.10</version>1011 </dependency>1213 <dependency>1415 <groupId>org.elasticsearch.client</groupId>1617 <artifactId>transport</artifactId>1819 <version>5.6.10</version>2021 </dependency>2223 <dependency>2425 <groupId>org.apache.logging.log4j</groupId>2627 <artifactId>log4j-to-slf4j</artifactId>2829 <version>2.9.1</version>3031 </dependency>3233 <dependency>3435 <groupId>org.slf4j</groupId>3637 <artifactId>slf4j-api</artifactId>3839 <version>1.7.24</version>4041 </dependency>4243 <dependency>4445 <groupId>org.slf4j</groupId>4647 <artifactId>slf4j-simple</artifactId>4849 <version>1.7.21</version>5051 </dependency>5253 <dependency>5455 <groupId>log4j</groupId>5657 <artifactId>log4j</artifactId>5859 <version>1.2.12</version>6061 </dependency>6263 <dependency>6465 <groupId>junit</groupId>6667 <artifactId>junit</artifactId>6869 <version>4.12</version>7071 </dependency>7273</dependencies>
7.2 创建索引库
1public class ElasticsearchClient {23 @Test45 public void createIndex throws Exception {67// 创建settings对象89 Settings settings = Settings.builder1011 .put("cluster.name","elasticsearch")1213 .build;1415// 创建客户端对象1617 TransportClient client = new PreBuiltTransportClient(settings);1819 client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300));2021// 创建索引库2223 client.admin.indices.prepareCreate("index_hello").get;2425// 关闭资源2627 client.close;2829 }3031}
7.3 设置映射
1public class ElasticsearchClient {23 @Test45 public void setMapping throws Exception {67// 创建settings对象89 Settings settings = Settings.builder1011 .put("cluster.name","elasticsearch")1213 .build;1415// 创建客户端对象1617 TransportClient client = new PreBuiltTransportClient(settings);1819 client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300));2021// 构建Mapping,RESTfull请求体2223 XContentBuilder builder = XContentFactory.jsonBuilder2425 .startObject2627 .startObject("article")2829 .startObject("properties")3031 .startObject("id")3233 .field("type","long")3435 .field("store",true)3637 .endObject3839 .startObject("title")4041 .field("type","text")4243 .field("store",true)4445 .field("analyzer","ik_smart")4647 .endObject4849 .startObject("content")5051 .field("type","text")5253 .field("store",true)5455 .field("analyzer","ik_smart")5657 .endObject5859 .endObject6061 .endObject6263 .endObject;6465// 使用客户端把mapping设置到索引库6667 client.admin.indices6869 .preparePutMapping("index_hello")7071 .setType("article")7273 .setSource(builder)7475 .get;7677// 关闭资源7879 client.close;8081 }8283}
7.4 添加文档
1public class ElasticsearchClient {23 @Test45 public void addDocument throws Exception {67// 创建settings对象89 Settings settings = Settings.builder1011 .put("cluster.name","elasticsearch")1213 .build;1415// 创建客户端对象1617 TransportClient client = new PreBuiltTransportClient(settings);1819 client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300));2021 XContentBuilder builder = XContentFactory.jsonBuilder2223 .startObject2425 .field("id",1L)2627 .field("title","商务部:有序有力组织商贸企业复工复产")2829 .field("content","新华社北京2月23日电(记者陈炜伟、王雨萧)记者23日从商务部了解到,商务部印发《关于统筹做好生活必需品供应保障有关工作的通知》,要求各地商务主管部门在确保疫情防控安全的前提下,有序有力组织商贸企业复工复产。")3031 .endObject;3233// 发送到服务器3435 client.prepareIndex("index_hello","article","1")3637 .setSource(builder)3839 .get;4041// 关闭资源4243 client.close;44454647 }4849}
7.5 查询(核心功能)
根据_Id查询
根据Term查询
根据QueryString查询
设置分页(在执行查询之前SearchResponse中方法setFrom和setSize)
设置高亮
1public class SearchIndex {23 private TransportClient client;45 @Before67 public void initthrows Exception {89// 创建settings对象1011 Settings settings = Settings.builder1213 .put("cluster.name", "elasticsearch")1415 .build;1617// 创建客户端对象1819 client = new PreBuiltTransportClient(settings);2021 client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));2223 }2425 @Test2627 public void searchById{2829// 创建查询对象3031 QueryBuilder queryBuilder = QueryBuilders.idsQuery.addIds("1","2");3233// 执行查询3435 SearchResponse searchResponse = client.prepareSearch("index_hello")3637 .setTypes("article")3839 .setQuery(queryBuilder)4041 .get;4243// 获取总记录数4445 SearchHits hits = searchResponse.getHits;4647 System.out.println("总记录数:"+hits.getTotalHits);4849// 结果列表5051 Iterator<SearchHit> iterator = hits.iterator;5253 while (iterator.hasNext){5455 SearchHit next = iterator.next;5657 Map<String, Object> source = next.getSource;5859 System.out.println("id:"+source.get("id"));6061 System.out.println("title:"+source.get("title"));6263 System.out.println("content:"+source.get("content"));6465 System.out.println("----------------------------------");6667 }68697071 }7273 @Test7475 public void searchByTerm{7677// 创建查询对象7879 QueryBuilder queryBuilder = QueryBuilders.termQuery("title","复工");8081// 执行查询8283 SearchResponse searchResponse = client.prepareSearch("index_hello")8485 .setTypes("article")8687 .setQuery(queryBuilder)8889 .get;9091// 获取总记录数9293 SearchHits hits = searchResponse.getHits;9495 System.out.println("总记录数:"+hits.getTotalHits);9697// 结果列表9899 Iterator<SearchHit> iterator = hits.iterator;100101 while (iterator.hasNext){102103 SearchHit next = iterator.next;104105 Map<String, Object> source = next.getSource;106107 System.out.println("id:"+source.get("id"));108109 System.out.println("title:"+source.get("title"));110111 System.out.println("content:"+source.get("content"));112113 System.out.println("----------------------------------");114115 }116117118119 }120121 @Test122123 public void searchByQueryString{124125// 创建查询对象126127 QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("我家住在临安").defaultField("title");128129// 执行查询130131 SearchResponse searchResponse = client.prepareSearch("index_hello")132133 .setTypes("article")134135 .setQuery(queryBuilder)136137 .setFrom(0)138139 .setSize(3)140141 .highlighter(new HighlightBuilder.field("title").preTags("<em>").postTags("</em>"))142143 .get;144145// 获取总记录数146147 SearchHits hits = searchResponse.getHits;148149 System.out.println("总记录数:"+hits.getTotalHits);150151// 结果列表152153 Iterator<SearchHit> iterator = hits.iterator;154155 while (iterator.hasNext){156157 SearchHit next = iterator.next;158159 Map<String, Object> source = next.getSource;160161 System.out.println("id:"+source.get("id"));162163 System.out.println("title:"+source.get("title"));164165 System.out.println("content:"+source.get("content"));166167 System.out.println("----------------------------------");168169 HighlightField title = next.getHighlightFields.get("title");170171 System.out.println(title.getFragments[0]);172173 }174175176177 }178179 @After180181 public void close{182183 client.close;184185 }186187}
Spring Data Elasticsearch
使用原始JAVA客户端操作ES非常复杂,Spring最擅长做整合对ES的操作将会大大简化,所以还是推荐使用Spring Data,原生的作为了解即可。
8.1 创建Maven工程,导入坐标
1 <dependencies>23 <dependency>45 <groupId>org.elasticsearch</groupId>67 <artifactId>elasticsearch</artifactId>89 <version>5.6.10</version>1011 </dependency>1213 <dependency>1415 <groupId>org.elasticsearch.client</groupId>1617 <artifactId>transport</artifactId>1819 <version>5.6.10</version>2021 </dependency>2223 <dependency>2425 <groupId>org.apache.logging.log4j</groupId>2627 <artifactId>log4j-to-slf4j</artifactId>2829 <version>2.9.1</version>3031 </dependency>3233 <dependency>3435 <groupId>org.slf4j</groupId>3637 <artifactId>slf4j-api</artifactId>3839 <version>1.7.24</version>4041 </dependency>4243 <dependency>4445 <groupId>org.slf4j</groupId>4647 <artifactId>slf4j-simple</artifactId>4849 <version>1.7.21</version>5051 </dependency>5253 <dependency>5455 <groupId>log4j</groupId>5657 <artifactId>log4j</artifactId>5859 <version>1.2.12</version>6061 </dependency>6263 <dependency>6465 <groupId>junit</groupId>6667 <artifactId>junit</artifactId>6869 <version>4.12</version>7071 </dependency>7273 <dependency>7475 <groupId>com.fasterxml.jackson.core</groupId>7677 <artifactId>jackson-core</artifactId>7879 <version>2.8.1</version>8081 </dependency>8283 <dependency>8485 <groupId>com.fasterxml.jackson.core</groupId>8687 <artifactId>jackson-databind</artifactId>8889 <version>2.8.1</version>9091 </dependency>9293 <dependency>9495 <groupId>com.fasterxml.jackson.core</groupId>9697 <artifactId>jackson-annotations</artifactId>9899 <version>2.8.1</version>100101 </dependency>102103 <dependency>104105 <groupId>org.springframework.data</groupId>106107 <artifactId>spring-data-elasticsearch</artifactId>108109 <version>3.0.9.RELEASE</version>110111 <exclusions>112113 <exclusion>114115 <groupId>org.elasticsearch.plugin</groupId>116117 <artifactId>transport-netty4-client</artifactId>118119 </exclusion>120121 </exclusions>122123 </dependency>124125 <dependency>126127 <groupId>org.springframework</groupId>128129 <artifactId>spring-test</artifactId>130131 <version>5.0.8.RELEASE</version>132133 <scope>test</scope>134135 </dependency>136137138139 </dependencies>
8.2 添加配置文件
1<?xml version="1.0" encoding="UTF-8"?>23<beans xmlns="http://www.springframework.org/schema/beans"45 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"67 xmlns:context="http://www.springframework.org/schema/context"89 xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"1011 xsi:schemaLocation="1213http://www.springframework.org/schema/beans1415http://www.springframework.org/schema/beans/spring-beans.xsd1617http://www.springframework.org/schema/context1819http://www.springframework.org/schema/context/spring-context.xsd2021http://www.springframework.org/schema/data/elasticsearch2223http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd2425">2627 <!-- 客户端对象 -->2829 <elasticsearch:transport-client id="esClient" cluster-name="elasticsearch" cluster-nodes="127.0.0.1:9300"/>3031 <!-- 包扫描器 -->3233 <elasticsearch:repositories base-package="com.itheima.es.repositories"/>3435 <!-- 模板对象 -->3637 <bean id="elasticsearchTemplate" class="mip3ac766daab0dce4d org.springframework.data.elasticsearch.core.ElasticsearchTemplate">3839 <constructor-arg name="client" ref="esClient"/>4041 </bean>4243</beans>
8.3 创建实体类,添加dao接口
1@Document(indexName = "my_blog",type = "article")23public class Article {45 @Id67 @Field(type = FieldType.Long)89 private Long id;1011 @Field(type = FieldType.Text,analyzer = "ik_smart")1213 private String title;1415 @Field(type = FieldType.Text,analyzer = "ik_smart")1617 private String content;18192021 public Article {2223 }24252627 public Article(Long id, String title, String content) {2829 this.id = id;3031 this.title = title;3233 this.content = content;3435 }36373839 public Long getId {4041 return id;4243 }44454647 public void setId(Long id) {4849 this.id = id;5051 }52535455 public String getTitle {5657 return title;5859 }60616263 public void setTitle(String title) {6465 this.title = title;6667 }68697071 public String getContent {7273 return content;7475 }76777879 public void setContent(String content) {8081 this.content = content;8283 }84858687 @Override8889 public String toString {9091 return "Article{" +9293 "id=" + id +9495 ", title='" + title + '\'' +9697 ", content='" + content + '\'' +9899 '}';100101 }102103}
1public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {23}
8.4 索引映射和文档增删改查
1@RunWith(SpringRunner.class)23@ContextConfiguration("classpath:applicationContext.xml")45public class ESTest {67 @Autowired89 private ArticleRepository articleRepository;1011 @Autowired1213 private ElasticsearchTemplate template;1415 @Test1617 public void createIndex{1819// 创建索引并配置映射关系2021 template.createIndex(Article.class);2223// 配置映射2425// template.putMapping(Article.class);2627 }2829 @Test3031 public void addDocumentAndUpdateDocument{3233 Article article = new Article(2L,"时政新闻眼丨在一场罕见的电视电话会上,习近平这样动员战“疫”","2月23日,农历二月初一。一场特别的会议在人民大会堂召开,分会场一直设到了县、团。中国正在打一场疫情防控的人民战争、总体战、阻击战。怎样分析这场战争?目前打到了哪一步?如何全面打赢?亲自指挥这场战争的习近平在这场“战时会议”上从容作答。");3435// 添加文档3637 articleRepository.save(article);3839 }4041 @Test4243 public void delDocument{4445// 根据Id删除4647 articleRepository.deleteById(1L);4849// 全部删除5051// articleRepository.deleteAll;5253 }5455 @Test5657 public void findAll{5859 Iterable<Article> all = articleRepository.findAll;6061 all.forEach(a-> System.out.println(a));6263 }6465 @Test6667 public void findById{6869 Optional<Article> optional = articleRepository.findById(2L);7071 System.out.println(optional.get);7273 }7475}
8.5 自定义查询
在接口中定义自定义查询,使用IDEA会有提示这里就不做介绍
8.6 原始查询条件查询
1 @Test23 public void nativeSearch{45 NativeSearchQuery query = new NativeSearchQueryBuilder67 .withQuery(89 QueryBuilders.queryStringQuery("测试一个查询")1011 .defaultField("title")1213 ).withPageable(PageRequest.of(0,15))1415 .build;1617 AggregatedPage<Article> articles = template.queryForPage(query, Article.class);1819 articles.forEach(a-> System.out.println(a));2021 }
到此ES学习已经够项目上使用了,所以学了这门技术就不要让他在你的大脑吃灰,赶紧应用到你们的项目中,最后祝大家技术越学越NB!
附 字段属性 字段属性详解 type
Elasticsearch中支持的数据类型非常丰富:
我们说几个关键的:
String类型,又分两种:
text:可分词,不可参与聚合
keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
Numerical:数值类型,分两类
基本数据类型:long、interger、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float
需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
index
index影响字段的索引情况。
true:字段会被索引,则可以用来进行搜索。默认值就是true
false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
store
是否将数据进行额外存储。
在学习lucene和solr时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。
但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。
原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在_source以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。
boost
激励因子,这个与lucene中一样
其它的不再一一讲解,用的不多,大家参考官方文档:
原文链接:
https://blog.csdn.net/mr_xinchen/article/details/104231377
UG提示“内存不足、内部错误、内存访问违例”解决方法汇总!
下面整理了5种方法,希望对大家有所帮助!!
一、保存时提示内存不足:比如,以下部件保存失败,内存不足!
这里可以尝试修改下保存的选项:
我们把“保存图纸的CGM数据”选项的对勾去掉
然后点击浏览,更改下目录,因为如果你直接点确定,可能会出现以下提示,代表你的C盘内没有temp文件夹,这时候你也可以选择重新在C盘新建一个TEMP文件夹
最后点击“确定”完成保存选项的设置。
如果保存的时候还是出现了报错,可以试一下另存为进行保存。
二、UG编程中出现的内存不足问题
比如:保存失败:未能保存以下对象....内部错误:内存访问违例
这个所涉及的原因很多,可能是模型问题,也可能是计算量太大,也可能是软件本身有BUG等等
解决方法:
移除参数后进行保存,因为可能是有些参数化的错误造成!
三、部件清理
他可以解决操作过程中提示的内存不足,解决有些对象无法选中,有些对象无法编辑,还有图层中明明显示有对象,可却无法查看到该对象等等一系列的原因......
部件清理可以帮助我们清理文件中的特定数据。有些文件中的数据类型,用其它方法是无法清除掉的。
部件清理命令从该部件文件中消除特定对象。没有部件清理,这些对象就不可访问,且不能被消除。
我们根据部件清理对数据的影响分组:
简单清理操作 是安全的操作,因为它们不会更改数据。
中等清理操作 通常以数据应当被更改的方式更改数据。但是,存在一些风险,它们的应用程序将执行您并不想要做的更改。
真正删除操作 (使用时要小心)执行更高风险的操作,因为它们总是移除数据。
在进行部件清理之前建议先备份一下原来的文件,免得造成不能挽回的损失。
首先他的选项位置,藏的那么隐蔽就说明他不简单,不到万不得已不用。
这里把他分成两块,我们一般先尝试上面的“简单清理操作”、“中等清理操作”、“中等删除操作”,下面的“真正删除操作(小心)”先不选 ,这边都叫我们小心了,所以一定要谨慎。这样进行一轮操作后,再测试部件是否正常,如果正常了就不用进行别的操作了。如果还是不行,那就把下面的“小心”选项也都勾上吧,这边再次建议,先进行文件备份。
四、恢复软件出产设置
恢复出产设置后,工具栏、首选项、角色界面设置都会被重置,在UG出现什么内存报错之类的问题的时候可以尝试一下用这个方法去解决。
恢复的方法很简单把下面这个文件夹中的文件全部删了即可,删除的时候记得先关闭UG。
以12.0为例目录地址是:
C:\Users\Administrator\AppData\Local\Siemens\NX120
这边的Administrator是你的用户名,NX120是你的版本。
在9.0以下的版本,这个文件夹会是在C:\Users\Administrator\AppData\Local\Unigraphics Solutions\NX版本号
如果找不到这个路径 可以在地址栏输入下面这段代码访问查找 %LocalAppData%
五、UG 提示内存不足 out of memory 无法保存文件的解决方法
在用UG的时候曾经遇到提示:内存不足(out of memory),无法保存或保存失败等现象,在尝试N次以后就只好放弃,只能是关掉UG重启,辛辛苦苦的设计就白费了,设计思路也给打断,要怎么解决呢,下面的方法证明是成功可行的:
进入制图模块(Drafting),随便放个投影图,选择导出DXF或者DWG格式文件,系统提示“你文件未保存,是否先保存再转换格式?”,当然选“Yes”,于是开始转换,等他导出完,你会发现标题栏上的“Modified”标志消失了,去文件夹里看看你的文件的日期,应该就是几分钟前的日期了,这就证明保存成功了,关闭UG,然后重新打开(释放内存),再打开文件继续工作就ok了。根源在于:UG在导出DXF格式时,你选“Yes”是,UG就先保存图档再转换,这样在内存不足的情况下也能自动保存,为什么呢——软件内部保存的优先级高?抑或点保存按钮方式先查看是否有足够内存,这个就不知道了,关键文件能保存已经很高兴了,希望对你有帮助!
以上不足之处多多指正!!!谢谢!!!
相关问答
惠普m176n提示101002耗材 内存 错误?题主是HP的打印机吧,一般hp打印机提示耗材内存警告是硒鼓的计数芯片计数到期了。如果只是提示告警但不影响打印,建议继续使用可以不用管他。如果提示警告,打...
UG4.0内部错误: 内存 访问冲突怎么解决?UG打不开中文名的文件,可能你的UG安装有问题。如果是在操作中出现内存访问冲突,你可以文件常用工具→部件清理→全部打钩,点击应用。再保存。关闭UG。再从启...
hp m1522nf一体机不能传真,但是复印和打印都可以,显示余量...惠普m1522nf打印机的主板怎么拆卸5.6万浏览6回答hplaserjetm1522mfpseriespcl6不能打印了,总是显示错误。昨天还用的好好的!1万浏览6回答...
惠普LaserJetProMFPM128fn显示100%耗材 内存 警告?控制面板消息:10.0000耗材内存错误。说明:特定打印碳粉盒存在电子标签错误。建议的操作:重新安装打印碳粉盒。关闭产品,然...控制面板消息:10.0000耗材内...
Photoshop 总 出错 ,该 内存 不能为read - N小小Y 的回答 - 懂得可以按照下面方法解决。(1)开始-运行:输入cmd,按“enter”键回车!进入"c:\windows\system32\cmd.exe"窗口(2)在"c:\window...
惠普打印机出现1000耗材 内存 错误?你那是用加过工的耗材吧!芯片没换,如果不是加工的耗材(及加粉的)那么就重新清零复位,方法:菜单键——右键2下——OK键一下——右键一下——,找到灰复默认...
windows7装了提示pressanykeytoreadmore,出现comandline_作业帮[回答]这句话的意思是:按任意键阅读更多内容.但是在电脑上基本上就可以理解为:你的程序和内存不兼容(这是我个人的理解)2种解决方案:1程序错误:换系统2内...
内存 错误是什么?一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。硬件来说:内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是...一...
用memtest检测出来 内存 有错误,什么问题?如果用memtest检测出来内存有错误,可能是内存条本身出现了问题,也可能是内存插槽出现了问题,建议检查内存条和内存插槽,如果发现有问题,可以尝试更换内存条...
HP LaserJet P1007打印机提示黑色碳粉盒 内存 错误,怎么办? -...出错原因:硒鼓芯片报错!可能出现的情况分析:1、硒鼓芯片上有一个橘红色的保护盖没有取下来。2、硒鼓不是原装硒鼓。解决方法:1、取下橘红色保护盖。...