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)
相關文章
相關標籤/搜索