はじめに
検索プラットフォームとして注目を浴びているApache Solr(アパッチ ソーラー)
やElasticsearch(エラスティックサーチ)
、
いずれも検索ライブラリApache Lucene(アパッチ ルシーン)
を利用し、
転置索引の作成と高度な全文検索を実現しています。
Apache Lucene に実際触れながら、その機能を理解してみることにします。
※ 全文検索のインデックスやトークナイズの基本は、以下拙文をご参照ください
Apache Lucene とは
※ 引用元: https://ja.wikipedia.org/wiki/Apache_Lucene
- Apacheトップレベルプロジェクトの1つで、
Doug Cutting
によって開発 - Java製のFLOSSの検索ライブラリ
-
FLOSS(フロス)
は、Free/Libre and Open Source Software
の頭字語 - 自由ソフトウェアとオープンソースをまとめた表現
-
- 強力な文書インデキシング及び検索機能を提供
- スペルチェック、ハイライト、テキスト解析機能を提供
- 日本語のテキスト解析を利用するためには、以下を利用
- トークナイザー(形態素解析)
- JapaneseTokenizer(Kuromoji)
- JapaneseAnalyzer(Kuromoji)
- アナライザー(フィルタリング・整形)
- CJKTokenizer
- CJKAnalyzer
- トークナイザー(形態素解析)
Apache Lucene のホームページ
Apache Lucene の GitHub リポジトリ
検証環境
OS: AlmaLinux 9
最新版のソースコードから Lucene をビルドする手順
OpenJDK 19 をインストール
- dnf コマンドで OpenJDK 19 をインストール
sudo dnf install java-19-openjdk-devel -y
- 別バージョンのJavaが存在する場合、
alternatives
コマンドで切り替え
alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-2.el9_1.x86_64/bin/java)
2 java-latest-openjdk.x86_64 (/usr/lib/jvm/java-19-openjdk-19.0.2.0.7-1.rolling.el9.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number: 2
- Java バージョンを確認
java -version
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment (Red_Hat-19.0.2.0.7-1.rolling.el9) (build 19.0.2+7)
OpenJDK 64-Bit Server VM (Red_Hat-19.0.2.0.7-1.rolling.el9) (build 19.0.2+7, mixed mode, sharing)
Gradle 7.6 をインストール
- Gradle バイナリファイルをダウンロード
wget https://services.gradle.org/distributions/gradle-7.6-bin.zip -P /tmp
-
/opt/gradle
ディレクトリに解凍
unzip -d /opt/gradle /tmp/gradle-7.6-bin.zip
- Gradle の環境変数を設定するスクリプトを作成
sudo tee /etc/profile.d/gradle.sh <<EOF
export GRADLE_HOME=/opt/gradle/gradle-7.6
export PATH=\$GRADLE_HOME/bin:\$PATH
EOF
- スクリプトに実行権限を付与
chmod +x /etc/profile.d/gradle.sh
- 環境変数をロード
source /etc/profile.d/gradle.sh
- Gradle バージョンを確認
gradle -v
Welcome to Gradle 7.6!
Here are the highlights of this release:
- Added support for Java 19.
- Introduced `--rerun` flag for individual task rerun.
- Improved dependency block for test suites to be strongly typed.
- Added a pluggable system for Java toolchains provisioning.
For more details see https://docs.gradle.org/7.6/release-notes.html
------------------------------------------------------------
Gradle 7.6
------------------------------------------------------------
Build time: 2022-11-25 13:35:10 UTC
Revision: daece9dbc5b79370cc8e4fd6fe4b2cd400e150a8
Kotlin: 1.7.10
Groovy: 3.0.13
Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM: 19.0.2 (Red Hat, Inc. 19.0.2+7)
OS: Linux 5.14.0-162.12.1.el9_1.x86_64 amd64
Lucene の Git リポジトリから最新版ソースコードをクローン
git clone https://github.com/apache/lucene.git
Gradle ランチャスクリプト gradlew
を実行
cd lucene
./gradlew
Downloading gradle-wrapper.jar from https://raw.githubusercontent.com/gradle/gradle/v7.6.0/gradle/wrapper/gradle-wrapper.jar
Generating gradle.properties
Downloading https://services.gradle.org/distributions/gradle-7.6-bin.zip
...........10%............20%...........30%............40%............50%...........60%............70%............80%...........90%............100%
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
> Task :help
Welcome to Gradle 7.6.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see more detail about a task, run gradlew help --task <task>
To see a list of command-line options, run gradlew --help
For more detail on using Gradle, see https://docs.gradle.org/7.6/userguide/command_line_interface.html
For troubleshooting, visit https://help.gradle.org
This is an experimental Lucene/Solr gradle build. See some
guidelines, ant-equivalent commands etc. under help/*; or type:
gradlew :helpWorkflow # Typical workflow commands.
gradlew :helpTests # Tests, filtering, beasting, etc.
gradlew :helpFormatting # Code formatting conventions.
gradlew :helpJvms # Using alternative or EA JVM toolchains.
gradlew :helpDeps # Declaring, inspecting and excluding dependencies.
gradlew :helpForbiddenApis # How to add/apply rules for forbidden APIs.
gradlew :helpLocalSettings # Local settings, overrides and build performance tweaks.
gradlew :helpRegeneration # How to refresh generated and derived resources.
gradlew :helpGit # Git assistance and guides.
gradlew :helpIDEs # IDE support.
gradlew :helpPublishing # Maven and other artifact publishing, signing, etc.
For the impatient, build the project with 'gradlew assemble'
BUILD SUCCESSFUL in 17s
3 actionable tasks: 1 executed, 2 up-to-date
数分の短い時間で無事 Lucene のビルドが終わりました。
おわりに
Apache Luceneの最新版をソースコードからビルドしました。
次回は Lucene のチュートリアルを試してみます。
お楽しみに。