概要
Gitコネクタは、Gitリポジトリのファイルを取得して Fess のインデックスに登録する機能を提供します。
この機能には fess-ds-git プラグインが必要です。
対応リポジトリ
GitHub(パブリック/プライベート)
GitLab(パブリック/プライベート)
Bitbucket(パブリック/プライベート)
ローカルGitリポジトリ
その他のGitホスティングサービス
前提条件
プラグインのインストールが必要です
プライベートリポジトリの場合は認証情報が必要です
リポジトリへの読み取りアクセス権が必要です
プラグインのインストール
管理画面の「システム」→「プラグイン」からインストールします。
または、詳細は プラグイン を参照してください。
設定方法
管理画面から「クローラー」→「データストア」→「新規作成」で設定します。
基本設定
| 項目 | 設定例 |
|---|---|
| 名前 | Project Git Repository |
| ハンドラ名 | GitDataStore |
| 有効 | オン |
パラメーター設定
パブリックリポジトリの例:
uri=https://github.com/codelibs/fess.git
base_url=https://github.com/codelibs/fess/blob/master/
extractors=text/.*:textExtractor,application/xml:textExtractor,application/javascript:textExtractor,
prev_commit_id=
delete_old_docs=false
プライベートリポジトリの例(認証あり):
uri=https://username:personal_access_token@github.com/company/private-repo.git
base_url=https://github.com/company/private-repo/blob/master/
extractors=text/.*:textExtractor,application/xml:textExtractor,
prev_commit_id=
delete_old_docs=false
パラメーター一覧
| パラメーター | 必須 | 説明 |
|---|---|---|
uri | はい | GitリポジトリのURI(clone用) |
base_url | はい | ファイル表示用のベースURL |
extractors | いいえ | MIMEタイプ別の抽出器設定 |
prev_commit_id | いいえ | 前回のコミットID(差分クロール用) |
delete_old_docs | いいえ | 削除されたファイルをインデックスから削除(デフォルト: false) |
スクリプト設定
url=url
host="github.com"
site="github.com/codelibs/fess/" + path
title=name
content=content
cache=""
digest=author.toExternalString()
anchor=
content_length=contentLength
last_modified=timestamp
mimetype=mimetype
利用可能なフィールド
| フィールド | 説明 |
|---|---|
url | ファイルのURL |
path | リポジトリ内のファイルパス |
name | ファイル名 |
content | ファイルのテキストコンテンツ |
contentLength | コンテンツの長さ |
timestamp | 最終更新日時 |
mimetype | ファイルのMIMEタイプ |
author | 最終コミット者の情報 |
Gitリポジトリの認証
GitHub Personal Access Token
1. GitHubでPersonal Access Tokenを生成
https://github.com/settings/tokens にアクセス:
「Generate new token」→「Generate new token (classic)」をクリック
トークン名を入力(例: Fess Crawler)
スコープで「repo」にチェック
「Generate token」をクリック
生成されたトークンをコピー
2. URIに認証情報を含める
uri=https://username:YOUR_GITHUB_TOKEN@github.com/company/repo.git
GitLab Private Token
1. GitLabでAccess Tokenを生成
GitLabのUser Settings → Access Tokens:
トークン名を入力
スコープで「read_repository」にチェック
「Create personal access token」をクリック
生成されたトークンをコピー
2. URIに認証情報を含める
uri=https://username:YOUR_GITLAB_TOKEN@gitlab.com/company/repo.git
SSH認証
SSH鍵を使用する場合:
uri=git@github.com:company/repo.git
注釈
SSH認証を使用する場合、Fess を実行しているユーザーのSSH鍵を設定する必要があります。
抽出器の設定
MIMEタイプ別の抽出器
extractors パラメーターでファイルタイプ別の抽出器を指定:
extractors=text/.*:textExtractor,application/xml:textExtractor,application/javascript:textExtractor,application/json:textExtractor,
形式: <MIMEタイプ正規表現>:<抽出器名>,
デフォルトの抽出器
textExtractor- テキストファイル用tikaExtractor- バイナリファイル用(PDF、Word等)
テキストファイルのみクロール
extractors=text/.*:textExtractor,
すべてのファイルをクロール
extractors=.*:tikaExtractor,
特定のファイルタイプのみ
# Markdown、YAML、JSONのみ
extractors=text/markdown:textExtractor,text/yaml:textExtractor,application/json:textExtractor,
差分クロール
前回のコミットからの変更のみクロール
初回クロール後、prev_commit_id に前回のコミットIDを設定:
uri=https://github.com/codelibs/fess.git
base_url=https://github.com/codelibs/fess/blob/master/
prev_commit_id=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
delete_old_docs=true
注釈
コミットIDは最後のクロール時のコミットIDを設定します。 これにより、そのコミット以降の変更のみがクロールされます。
削除されたファイルの処理
delete_old_docs=true を設定すると、Gitリポジトリから削除されたファイルが インデックスからも削除されます。
使用例
GitHubパブリックリポジトリ
パラメーター:
uri=https://github.com/codelibs/fess.git
base_url=https://github.com/codelibs/fess/blob/master/
extractors=text/.*:textExtractor,application/xml:textExtractor,
delete_old_docs=false
スクリプト:
url=url
host="github.com"
site="github.com/codelibs/fess/" + path
title=name
content=content
last_modified=timestamp
mimetype=mimetype
GitHubプライベートリポジトリ
パラメーター:
uri=https://username:YOUR_GITHUB_TOKEN@github.com/company/repo.git
base_url=https://github.com/company/repo/blob/main/
extractors=text/.*:textExtractor,application/xml:textExtractor,application/javascript:textExtractor,
delete_old_docs=false
スクリプト:
url=url
title=name
content=content
digest=author.toExternalString()
content_length=contentLength
last_modified=timestamp
mimetype=mimetype
GitLab(セルフホスト)
パラメーター:
uri=https://username:glpat-abc123@gitlab.company.com/team/project.git
base_url=https://gitlab.company.com/team/project/-/blob/main/
extractors=text/.*:textExtractor,
prev_commit_id=
delete_old_docs=false
スクリプト:
url=url
host="gitlab.company.com"
site="gitlab.company.com/team/project/" + path
title=name
content=content
last_modified=timestamp
ドキュメントのみクロール(Markdownファイル)
パラメーター:
uri=https://github.com/codelibs/fess.git
base_url=https://github.com/codelibs/fess/blob/master/
extractors=text/markdown:textExtractor,text/plain:textExtractor,
delete_old_docs=false
スクリプト:
if (mimetype.startsWith("text/")) {
url=url
title=name
content=content
last_modified=timestamp
}
特定のディレクトリのみクロール
スクリプトでフィルタリング:
if (path.startsWith("docs/") || path.startsWith("README")) {
url=url
title=name
content=content
last_modified=timestamp
mimetype=mimetype
}
トラブルシューティング
認証エラー
症状: Authentication failed または Not authorized
確認事項:
Personal Access Tokenが正しいか確認
トークンに適切な権限があるか確認(
repoスコープ)URIのフォーマットが正しいか確認:
# 正しい uri=https://username:token@github.com/company/repo.git # 間違い uri=https://github.com/company/repo.git?token=...
トークンの有効期限を確認
リポジトリが見つからない
症状: Repository not found
確認事項:
リポジトリのURLが正しいか確認
リポジトリが存在し、削除されていないか確認
認証情報が正しいか確認
リポジトリへのアクセス権があるか確認
ファイルが取得できない
症状: クロールは成功するがファイルが0件
確認事項:
extractors設定が適切か確認リポジトリにファイルが存在するか確認
スクリプト設定が正しいか確認
対象ブランチにファイルが存在するか確認
MIMEタイプエラー
症状: 特定のファイルがクロールされない
解決方法:
抽出器設定を調整:
# すべてのファイルを対象
extractors=.*:tikaExtractor,
# 特定のMIMEタイプを追加
extractors=text/.*:textExtractor,application/json:textExtractor,application/xml:textExtractor,
大きなリポジトリ
症状: クロールに時間がかかる、またはメモリ不足
解決方法:
extractorsで対象ファイルを限定スクリプトで特定のディレクトリのみをフィルタリング
差分クロールを使用(
prev_commit_id設定)クロール間隔を調整
ブランチの指定
デフォルトブランチ以外をクロールする場合:
uri=https://github.com/company/repo.git#develop
base_url=https://github.com/company/repo/blob/develop/
# の後にブランチ名を指定します。
URLの生成
base_urlの設定パターン
GitHub:
base_url=https://github.com/user/repo/blob/master/
GitLab:
base_url=https://gitlab.com/user/repo/-/blob/main/
Bitbucket:
base_url=https://bitbucket.org/user/repo/src/master/
base_url とファイルパスが結合されてURLが生成されます。
スクリプトでのURL生成
url=base_url + path
title=name
content=content
または、カスタムURL:
url="https://github.com/mycompany/repo/blob/main/" + path
title=name
content=content
参考情報
データストアコネクタの概要 - データストアコネクタ概要
データベースコネクタ - データベースコネクタ
データストアクロール - データストア設定ガイド