1. 程式人生 > >Elasticsearch全文檢索工具入門

Elasticsearch全文檢索工具入門

使用步驟 artifact rop 創建 是否 方式 cluster 包名 Lucene

  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全文檢索工具入門