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)