1. 程式人生 > 實用技巧 >使用ElasticSearch全文檢索以及叢集部署

使用ElasticSearch全文檢索以及叢集部署

ElasticSearch 即 ES

安裝:版本---elasticsearch-2.4.6.tar.gz

      tar -zxvfelasticsearch-2.4.6.tar.gz

由於es不允許使用root管理員啟動程式,所以我們需要新建使用者:

    useradd es

修改es檔案許可權

    chown -R es ./elasticsearch-2.4.6/bin

然後就可以使用es使用者後臺啟動es了

    su es

    ./elasticsearch-2.4.6/bin/elasticsearch -d

  由於es啟動預設的堆記憶體空間是1G,所以可能請求出現問題

    錯誤資訊:org.elasticsearch.common.breaker.CircuitBreakingException: [parent] Data too large, data for [<transport_request>] would be [986966428/941.2mb], which is larger than the limit of [986061209/940.3mb], real usage:  

    解決方案:

      ./elasticsearch-2.4.6/bin/elasticsearch-Xms4g -Xmx4g -d rug

    如果還沒有解決就是es記憶體告急,預設使用70%   調整熔斷記憶體比例大小:

      curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_cluster/settings -d '{"persistent":{"indices":{"breaker":{"fielddata":{"limit" : "95%" }}}}}'

配置es服務端,---->> 如果沒有配置springboot會自動建立一個本地目錄供es使用

spring:
  data:
   elasticsearch:
    cluster-nodes: 127.0.0.1:9300,127.0.0.2:9300 #叢集用逗號分開
    cluster-name: elasticsearch


es的使用方式和jpa極其相似,dao層也是用介面 不同的是es的dao繼承ElasticSearchRepository

由於ElasticSearchRepository與JpaRepository都繼承自PagingAndSortingRepository,所以es和jpa使用同一個實體類時往往會出現問題
(詳細見:https://stackoverflow.com/questions/36252099/no-property-index-found-for-type-user)

而實體類的註解類:JPA使用的是@Entity , ES使用的是@Document(indexName="專案名",type="article") Document的indexName和type不能包含大寫字母,否則會報錯,indexName相當於mysql的database,type相當於table

解決方案:

將ES的repository單獨放在其他的包,如果其他的jpa都在com.test.news下,那es可以放在com,test.es中

在啟動類中加上註解:

@EnableElasticsearchRepositories(basePackages = "com.test.es")
@EnableJpaRepositories(basePackages = {"com.test.news"})

在linux上叢集: 修改配置檔案

  cluster.name: elasticsearch

  node.name: node-1 #每一個節點都不一樣

  network.host: 0.0.0.0

  http.port: 9200

  discovery.zen.ping.unicast.hosts: ["host1", "host2"] #叢集ip

  discovery.zen.minimum_master_nodes: 2 #正常是叢集數一半+1