前書き
ElasticSearchは、Luceneをベースにした検索サーバーです。これは、RESTful Webインターフェースに基づいて、分散マルチユーザー機能を備えた全文検索エンジンを提供します。ElasticsearchはJavaで開発され、Apacheライセンスの条件の下でオープンソースとしてリリースされています。これは人気のあるエンタープライズ検索エンジンです。クラウドコンピューティングで使用するように設計されており、リアルタイム検索、安定性、信頼性、高速性、インストールと使用の容易さを実現できます。Basepedia、Stack Overflow、Githubはすべてそれを使用しています。
この記事は最初から始まり、Elasticsearchを使用して独自のフルテキスト検索エンジンを構築する方法を説明します。各ステップの詳細な手順があり、誰もがそれらに従うことで学ぶことができます。
ElasticSearchをインストールします
ダウンロードリンク:https: //www.elastic.co/downloads/elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
cd /usr/local
tar -zxvf elasticsearch-5.5.2.tar.gz
su tzs
tzsユーザーに切り替えます(rootユーザーはデフォルトではサポートされていません)
sh /usr/local/elasticsearch/bin/elasticsearch -d
ここで、-dはバックグラウンドで開始することを意味します
vmwareで成功するかどうかをテストします:curl http:// localhost:9200 /
上記のような効果が現れた場合は、インストールされていることを意味します。
Elasticsearchのデフォルトのrestful-apiポートは9200です。IPアドレスはサポートされていません。つまり、仮想マシンのサービスにはホストからアクセスできず、http:// localhost:9200を使用してローカルマシンでのみアクセスできます 。変更する必要がある場合は、構成ファイル/usr/local/elasticsearch/config/elasticsearch.ymlを変更し、次の2行を追加する必要があります。
network.bind_host: 0.0.0.0
network.publish_host: _nonloopback:ipv4
または、network.hostとhttp.portの前のコメントを削除し、network.hostのIPアドレスをマシンの外部IPに変更します。その後、Elasticsearchを再起動します
シャットダウンメソッド(コマンド:を入力しps -ef | grep elasticsearch
、プロセスを見つけて、それを強制終了します。
それでも外部ネットワークにアクセスすることができない場合は、ファイアウォールの設定によって、そこに発生することがあり(ファイアウォールをオフにしますservice iptables stop
)
構成ファイルを変更します。vim config/elasticsearch.yml
cluster.name:my-app(クラスターの名前、同じ名前はクラスターです)
node.name:es1(ノードの名前。前に構成したホストの名前と同じである必要があります)
path.data:/ data / elasticsearch / data(データのパス。(mkdir -p /data/elasticsearch/{data,logs}
)を作成し、実行ユーザーにアクセス許可を与える 必要はありませんchown tzs /data/elasticsearch/{data,logs} -R
)
path.logs:/ data / elasticsearch / logs(データログのパス情報、上記と同じ)
network.host:0.0.0.0 //外部ネットワークアクセスまたは独自のIPアドレスを
許可するhttp.port:9200 //アクセスポート
discovery.zen.ping.unicast.hosts:["192.168.153.133 "、" 192.168.153.134 "、" 192.168.153.132 "] //各ノードのIPアドレス
追加することを忘れないでください:(これはヘッドプラグインのインストールに使用されますが、現在は必要ありません)
http.cors.enabled:true
http.cors.allow-origin: "*"
最後に、外部ブラウザでの効果は次のとおりです。
IK中国語の単語セグメンテーションをインストールする
ソースコードを自分でダウンロードし、mavenを使用してコンパイルすることもできます。もちろん、問題が心配な場合は、コンパイルしたものを直接ダウンロードできます。
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v5.5.2
プラグインディレクトリで対応するバージョンをダウンロードすることに注意してください
解凍する
unzip elasticsearch-analysis-ik-5.5.2.zip
esのプラグインの下に新しいikディレクトリを作成します
mkdir ik
解凍したファイルをikディレクトリにコピーします
cp -r elasticsearch/* ik
解凍したものを削除します
rm -rf elasticsearch
rm -rf elasticsearch-analysis-ik-5.5.2.zip
IKには2つのトークナイザーが付属しています
ik_max_word :テキストは最も細かい粒度で分割されます;できるだけ多くの単語を分割します
ik_smart:最も粗い分割を行います;分離された単語は他の単語によって再び占有されることはありません
IK中国語トークナイザーをインストールした後(もちろん、この中国語トークナイザー以外にもあります。Elasticsearchのデフォルトトークナイザーとミドルトークナイザーの比較とその使用方法についての私の記事を参照してください )、テストの違いは次のとおりです。次のとおりです。
i_max_word
カール-XGET「http://192.168.153.134:9200/_analyze?pretty&analyzer=ik_max_word」-d'Lenovoは「世界最大のノートパソコンメーカーであります
{
"tokens" : [
{
"token" : "联想",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "是",
"start_offset" : 2,
"end_offset" : 3,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "全球",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "最大",
"start_offset" : 5,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "的",
"start_offset" : 7,
"end_offset" : 8,
"type" : "CN_CHAR",
"position" : 4
},
{
"token" : "笔记本",
"start_offset" : 8,
"end_offset" : 11,
"type" : "CN_WORD",
"position" : 5
},
{
"token" : "笔记",
"start_offset" : 8,
"end_offset" : 10,
"type" : "CN_WORD",
"position" : 6
},
{
"token" : "本厂",
"start_offset" : 10,
"end_offset" : 12,
"type" : "CN_WORD",
"position" : 7
},
{
"token" : "厂商",
"start_offset" : 11,
"end_offset" : 13,
"type" : "CN_WORD",
"position" : 8
}
]
}
ik_smart
curl -XGET'http :// localhost:9200 / _analyze?pretty&analyzer = ik_smart ' -d'Lenovoは世界最大のノートブックメーカーです'
{
"tokens" : [
{
"token" : "联想",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "是",
"start_offset" : 2,
"end_offset" : 3,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "全球",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "最大",
"start_offset" : 5,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "的",
"start_offset" : 7,
"end_offset" : 8,
"type" : "CN_CHAR",
"position" : 4
},
{
"token" : "笔记本",
"start_offset" : 8,
"end_offset" : 11,
"type" : "CN_WORD",
"position" : 5
},
{
"token" : "厂商",
"start_offset" : 11,
"end_offset" : 13,
"type" : "CN_WORD",
"position" : 6
}
]
}
ヘッドプラグインをインストールします
elasticsearch-headはelasticsearchクラスター管理ツールです。これは完全にhtml5によって記述された独立したWebプログラムです。プラグインを介してesに統合できます。
gitをインストールする
yum remove git
yum install git
git clone git://github.com/mobz/elasticsearch-head.git 拉取 head 插件到本地,或者直接在 GitHub 下载 压缩包下来
nodejsをインストールします
公式ウェブサイトにアクセスして、最初にnode-v8.4.0-linux-x64.tar.xzをダウンロードします
tar -Jxv -f node-v8.4.0-linux-x64.tar.xz
mv node-v8.4.0-linux-x64 node
環境変数の設定:
vim /etc/profile
追加:
export NODE_HOME=/opt/node
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
構成ファイルを有効にします(この手順は非常に重要です。この手順にもっと注意を払う必要があります)
source /etc/profile
グローバルに利用できるかどうかをテストします。
node -v
その後
mv elasticsearch-head head
cd head/
npm install -g grunt-cli
npm install
grunt server
es構成ファイルに追加します。
http.cors.enabled: true
http.cors.allow-origin: "*"
ブラウザhttp://192.168.153.133:9100/
で開く と効果がわかりますが、
遭遇問題
将来再びピットに入るのを防ぐために、私は再びピットを通り抜けました、ここにそれを記録します
1、ERROR mbeansを登録できませんでしたjava.security.AccessControlException:アクセスが拒否されました(「javax.management.MBeanTrustPermission」「register」)
elasticsearchフォルダーの所有者を現在のユーザーに変更します
sudo chown -R noroot:noroot Elasticsearch
これは、elasticsearchが構成ファイルの読み取りと書き込みを行う必要があるためです。configフォルダーにアクセス許可を与える必要があります。新しいelsearchユーザーが上に作成されます。elsearchユーザーには読み取りと書き込みのアクセス許可がないため、エラーが報告されます。解決策は、管理者アカウントに切り替えてアクセス許可を付与することです。
sudo -i
chmod -R 775 config
2、[警告] [oebElasticsearchUncaughtExceptionHandler] []スレッドでキャッチされない例外[メイン]
org.elasticsearch.bootstrap.StartupException:java.lang.RuntimeException:elasticsearchをrootとして実行できません
その理由は、elasticsearchはデフォルトでrootユーザーによる起動をサポートしていないためです。
解決策1:Des.insecure.allow.root = true
/usr/local/elasticsearch-2.4.0/bin/elasticsearchを変更します。
追加ES_JAVA_OPTS =”-Des.insecure.allow.root = true”
または、実行中に追加します:sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d -Des.insecure.allow.root = true
注:正式な環境でrootを使用して実行すると、セキュリティ上のリスクが生じる可能性があります。rootを使用して実行することはお勧めしません。
解決策2:専用ユーザーを追加する
useradd elastic
chown -R elastic:elastic elasticsearch-2.4.0
su elastic
sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d
3、UnsupportedOperationException:seccompを使用できません:CONFIG_SECCOMPおよびCONFIG_SECCOMP_FILTERがコンパイルされたカーネル3.5以降が必要です
警告ですが、新しいLinuxバージョンでは、この種の問題は発生しません。
4、エラー:[4]ブートストラップチェックに失敗しました
[1]:elasticsearchプロセスの最大ファイル記述子[4096]が低すぎます、少なくとも[65536]に増やしてください
理由:ローカルファイルの問題を作成できない、ユーザーが作成できるファイルの最大数が少なすぎる
解決策:rootユーザーに切り替え、limits.conf構成ファイルを編集して、次のようなコンテンツを追加します。
vim /etc/security/limits.conf
次のコンテンツを追加します。
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
[2]:ユーザー[tzs]のスレッドの最大数[1024]が少なすぎるため、少なくとも[2048]に増やしてください
理由:ローカルスレッドの問題を作成できない、ユーザーが作成できるスレッドの最大数が少なすぎる
解決策:rootユーザーに切り替え、limits.dディレクトリーを入力して、90-nproc.conf構成ファイルを変更します。
vim /etc/security/limits.d/90-nproc.conf
以下を見つけてください。
- ソフトnproc1024
着替える
- ソフトnproc2048
[3]:最大仮想メモリ領域vm.max_map_count [65530]が低すぎます、少なくとも[262144]に増やしてください
理由:最大仮想メモリが小さすぎます
rootユーザーは次のコマンドを実行します。
sysctl -w vm.max_map_count=262144
または、/ etc / sysctl.confファイルを変更して、「vm.max_map_count」
設定を追加します。設定後、
$ sysctl-pを使用できます。
[4]:システムコールフィルターのインストールに失敗しました。ログを確認して構成を修正するか、自己責任でシステムコールフィルターを無効にしてください
理由:Centos6はSecCompをサポートしておらず、ES5.4.1のデフォルトのbootstrap.system_call_filterは検出に対してtrueであるため、検出は失敗し、失敗するとESの起動に直接失敗します。
詳細については、https://github.com/elastic/elasticsearch/issues/22899を参照してください。
解決策:elasticsearch.ymlに新しい構成bootstrap.system_call_filterを追加し、falseに設定し、メモリの下で注意を払います:
bootstrap.memory_lock:false
bootstrap.system_call_filter:false
5、java.lang.IllegalArgumentException:プラグイン[head]のプロパティ[elasticsearch.version]がありません
es構成ファイルに追加します。
http.cors.enabled: true
http.cors.allow-origin: "*"