1 Elasticsearch全文检索工具入门:
2 1.下载对应系统版本的文件
3 elasticsearch-2.4.0.zip
4 1.1运行elasticsearch-2.4.0\elasticsearch-2.4.0\bin\elasticsearch.bat文件
5 访问 http://127.0.0.1:9200
6 1.2ElasticSearch 插件安装 es head
7 在命令窗口输入下面的命令:
8 %elasticsearch%/bin/plugin.bat install mobz/elasticsearch-head
9 就会下载可视化界面的插件
10 访问 http://localhost:9200/_plugin/head/即可
11 2.ElasticSearch基础数据架构的主要概念:
12 2.1索引对象: 存储数据的表结构 ,任何搜索数据,存放在索引对象上
13 2.2映射: 数据如何存放到索引对象上,需要有一个映射配置, 数据类型、是否存储、是
14 否分词 …
15 2.3文档: 一条数据记录, 存在索引对象上
16 2.3文档类型: 一个索引对象 存放多种类型数据, 数据用文档类型进行标识
17 2.4编程: 建立索引对象 --- 建立映射 --- 存储数据【文档】 --- 指定文档类型进行搜索数
18 据【文档】
19 3.新建 maven 项目测试Elasticsearch的检索功能
20 3.1基于maven的pom导入坐标依赖
21 <dependencies>
22 <dependency>
23 <groupId>org.elasticsearch</groupId>
24 <artifactId>elasticsearch</artifactId>
25 <version>2.4.0</version>
26 </dependency>
27 <dependency>
28 <groupId>junit</groupId>
29 <artifactId>junit</artifactId>
30 <version>4.12</version>
31 </dependency>
32 </dependencies>
33 3.2当直接在ElasticSearch建立文档对象时,如果索引不存在的,默认会自动创建,映射采用默认方式
34 ElasticSearch 服务默认端口 9300
35 Web 管理平台端口 9200
36 3.3建立文档,自动创建索引
37 建立测试类直接运行:
38 // 创建索引对象(存储文档数据)
39 @Test
40 public void testCreateTable() throws Exception {
41 // 1.创建搜索服务器的对象
42 Client client = TransportClient
43 .builder()
44 .build()
45 .addTransportAddress(
46 new InetSocketTransportAddress(InetAddress
47 .getByName("127.0.0.1"), 9300));
48 // 2.建立json数据
49 XContentBuilder build = XContentFactory
50 .jsonBuilder()
51 .startObject()
52 .field("id", 1)
53 .field("title", "es索引的简单测试创建")
54 .field("content",
55 "ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。")
56 .endObject();
57 // 3.建立文档对象
58 client.prepareIndex("table1", "serach", "1").setSource(build).get();
59 // 4.关闭连接
60 client.close();
61 }
62 // 搜索指定索引中的文章信息
63 @Test
64 public void testCreateTable() throws Exception {
65 // 1.创建搜索服务器的对象
66 Client client = TransportClient
67 .builder()
68 .build()
69 .addTransportAddress(
70 new InetSocketTransportAddress(InetAddress
71 .getByName("127.0.0.1"), 9300));
72 // 2.搜索数据
73 SearchResponse searchResponse = client.prepareSearch("table1")
74 .setTypes("serach").setQuery(QueryBuilders.matchAllQuery())
75 .get();
76 // 3.获取命中数,获取查询结果条数
77 SearchHits hits = searchResponse.getHits();
78 System.out.println(hits);
79 // 4.便利查询结果
80 Iterator<SearchHit> iterator = hits.iterator();
81 while(iterator.hasNext()){
82 //每一个查询的对象
83 SearchHit searchHit = iterator.next();
84 System.out.println(searchHit.getSourceAsString());//获取字符串的打印格式
85 System.out.println("title:"+searchHit.getSource().get("title"));
86 }
87 // 5.关闭连接
88 client.close();
89 }
90 3.4各种查询对象 Query 的使用
91 ElasticSearch 支持所有 Lucene 查询,并对其进行简化封装
92 TermQuery 词条查询
93 WildcardQuery 模糊查询
94 使用 wildcardQuery 磨合查询 *任意字符串 ?任意单个字符
95 FuzzyQuery 相似度查询
96 BooleanQuery 布尔查询
97 QueryBuileders.queryStringQuery(搜索内容) 查询方法,对所有字段进行分词查询
98 3.5ik分词器的安装与简单使用步骤:
99 ElasticSearch 默认采用分词器, 单个字分词 ,效果很差
100 下载网址 https://github.com/medcl/elasticsearch-analysis-ik/tree/2.x
101 插件安装步骤:
102 3.5.1解压缩下载的文件,执行mvn clean和mvn package(可以选择执行这两个命令,
103 如果文件夹中包含target文件夹则不需要进行这两个操作)
104 3.5.2复制解压文件中的target/release目录下除了1.10.0和1.10.0.zip结尾的所有文件到
105 es的插件包plugins/analysis-ik目录下面
106 3.5.3进入 target/release/config 目录将所有配置文件,复制到 %es%/config目录下面
107 3.5.4配置 elasticsearch.yml 在最后面一行添加 # index.analysis.analyzer.ik.type: "ik"即可
108 3.5.5重启 es
109 3.5.6访问http://localhost:9200/_analyze?analyzer=ik&pretty=true&text=我是中国人 -->OK
110 4.Spring Data ElasticSearch入门
111 4.1什么是 spring data elasticSearch ?
112 Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch 操作 ,将原始操作
113 elasticSearch 的客户端 API 进行封装
114 官方网站:http://projects.spring.io/spring-data-elasticsearch/
115 4.2创建maven项目并引入相关的jar坐标
116 Maven 坐标
117 <dependencies>
118 <dependency>
119 <groupId>org.springframework.data</groupId>
120 <artifactId>spring-data-elasticsearch</artifactId>
121 <version>2.0.4.RELEASE</version>
122 </dependency>
123 <dependency>
124 <groupId>org.elasticsearch</groupId>
125 <artifactId>elasticsearch</artifactId>
126 <version>2.4.0</version>
127 </dependency>
128 <dependency>
129 <groupId>junit</groupId>
130 <artifactId>junit</artifactId>
131 <version>4.12</version>
132 </dependency>
133 <dependency>
134 <groupId>org.springframework</groupId>
135 <artifactId>spring-test</artifactId>
136 <version>4.2.8.RELEASE</version>
137 </dependency>
138 <dependency>
139 <groupId>org.slf4j</groupId>
140 <artifactId>slf4j-log4j12</artifactId>
141 <version>1.7.12</version>
142 </dependency>
143 </dependencies>
144 4.3修改applicationContext.xml文件
145 在 src/main/resources 下建立 applicationContext.xml 和 log4j.properties
146 引入 spring data elasticsearch 名称空间
147 <?xml version="1.0" encoding="UTF-8"?>
148 <beans xmlns="http://www.springframework.org/schema/beans"
149 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
150 xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
151 xsi:schemaLocation="
152 http://www.springframework.org/schema/beans
153 http://www.springframework.org/schema/beans/spring-beans.xsd
154 http://www.springframework.org/schema/data/elasticsearch
155 http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd">
156 <!-- 搜索DAO 扫描 -->
157 <elasticsearch:repositories base-package="cn.itcast.bos.index" />
158 <!-- 配置Client -->
159 <elasticsearch:transport-client id="client" cluster-nodes="127.0.0.1:9300"/>
160 <!-- 配置搜索模板 -->
161 <bean id="elasticsearchTemplate"
162 class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
163 <constructor-arg name="client" ref="client" />
164 </bean>
165 </beans>
166 4.4 创建 domain、dao、service 包
167 4.4.1:编写reporstory extends ElasticsearchReporstory(){}
168 4.4.2: 索引和映射如何创建 --- 基于 spring data elasticsearch 注解
169 在使用 spring data elasticsearch 开发, 需要将索引和映射信息 配置实体类上面
170 @Document 文档对象 (索引信息、文档类型 )
171 @Id 文档主键 唯一标识
172 @Field 每个文档的字段配置(类型、是否分词、是否存储、分词器 )
173 5.Spring Data ElasticSearch整合项目操作流程:
174 5.1:在common_parent的pom.xml配置文件中导入相关jar包的坐标
175 <!-- Elasticsearch相关的jar包 -->
176 <dependencies>
177 <dependency>
178 <groupId>org.springframework.data</groupId>
179 <artifactId>spring-data-elasticsearch</artifactId>
180 <version>2.0.4.RELEASE</version>
181 </dependency>
182 <dependency>
183 <groupId>org.elasticsearch</groupId>
184 <artifactId>elasticsearch</artifactId>
185 <version>2.4.0</version>
186 </dependency>
187 </dependency>
188 </dependencies>
189 5.2:在bos_domain中操作实体类配置相关注解信息(需要在实体类 WayBill 对象,添加elasticsearch的索引和映射关系)
190 5.3:配置applicationContext_elasticsearch.xml文件
191 同上4.3的所有配置,只需改一些包名即可使用
192 5.4:创建Dao来操作数据库,让其继承ElasticsearchReporstory即可进行下一步操作
193 public interface ESRepository extends ElasticsearchRepository<WayBill, Integer> {}
194 5.5:在service中注入Dao对象就可以使用它里面的一些相关方法
195 @Document(indexName="domain",type="waybill") //声明索引名称与类型
196 @org.springframework.data.annotation.Id //声明主键
197 @Field(index=FieldIndex.not_analyzed,store=true,type=FieldType.Integer) //声明该属性是否进行分词
198 @Field(index = FieldIndex.analyzed, analyzer = "ik", searchAnalyzer = "ik", store = true, type = FieldType.String)
199 //声明该注解使用ik分词器进行分词查询
200 5.6 修改 Service 代码 注入
201 @Autowired
202 private ESRepository esr;
203 使用ElasticsearchRepository中的API来操作文档(也就是实体类)
204 5.7 基于ElasticsearchRepository的条件查询是最重要的
205 主要运用QueryBuilder中的BoolQueryBuilder来拼接查询的条件
206 可以结合dategrid的load方法进行多条件的一个查询(must)