Elasticsearch全文检索工具入门

Posted yshang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch全文检索工具入门相关的知识,希望对你有一定的参考价值。

  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)

 

以上是关于Elasticsearch全文检索工具入门的主要内容,如果未能解决你的问题,请参考以下文章

二.全文检索ElasticSearch经典入门-ElasticSearch核心概念

elasticsearch学习入门

一.全文检索ElasticSearch经典入门-ElasticSearch介绍与安装

elasticsearch代码片段,及工具类SearchEsUtil.java

Elasticsearch全文检索技术 一篇文章即可从入门到精通(Elasticsearch安装,安装kibana,安装ik分词器,数据的增删改查,全文检索查询,聚合aggregations)(代码片

全文搜索引擎 Elasticsearch 入门教程