SlideShare a Scribd company logo
1 of 51
Download to read offline
全文検索システムFessを用いた
検索システム構築入門
JJUG CCC 2016 Fall
自己紹介
名前:菅谷信介
お仕事:
➔ N2SMでFessを作ったり…
➔ ビズリーチで機械学習をやったり…
オープンソース関連:
➔ Fess, DBFlute関連, Apache Portals,
Codehaus, Seasar2,...
アジェンダ
■ Fessの概要
■ 各種機能の説明
■ システム構成の説明
■ ユースケース
■ 開発について
Fessとは
Fessとは
■ オープンソースの全文検索システム
➔5分で構築できるくらい簡単に利用可能
■ Apacheライセンスで提供
■ Javaベースのアプリケーションサーバ
■ Elasticsearchを検索エンジンとして利用
■ 現在の最新バージョンは10.3
http://fess.codelibs.org/ja/
検索分野での立ち位置
クローラやUIを提供することで手軽な導入実現
検索関連の知識なくても利用可能(すぐに使える)
検索関連の知識が必要(ガッツリ作りこみが必要)
検索システム
➔ Fess、商用検索システム(GSAとか)
検索サーバ+クローラ
➔ Hyper Estraier、Namazu、Nutchなど
検索サーバ
➔ Solr、Elasticsearch、groongaなど
検索ライブラリ
➔ Luceneなど
歴史
2009/09 Fess 1.0リリース
➔ ウェブやファイルシステムを対象に検索(Solr 1.3を利用)
Fess 2.0〜8.0
➔ ロール検索に対応 (認証状態による検索)
➔ 差分クロール、データベースクロール対応
➔ NTLM認証対応
➔ ジオ・サーチ対応
➔ Responsive Web Design化
2014/02 Fess 9.0リリース
➔ Solr 4.10.4を利用
2016/02 Fess 10.0リリース
➔ Java 8対応
➔ Elasticsearchに変更 (大規模対応)
➔ グローバル化
配布物
■ GitHubからダウンロード可能
➔https://github.com/codelibs/fess/releases
■ 各種形式で提供
➔ZIP: 組み込みElasticsearchを利用
➔RPM: ElasticsearchのRPMを利用
➔DEB: ElasticsearchのDEBを利用
■ 手軽に起動して試すならZIP版
➔Windows環境向け
➔設定すれば、外部Elasticsearchに変更可能
■ Java 8が必要
起動方法
■ ZIP版
$ ./bin/fess
■ RPM/DEB版
$ sudo service elasticsearch start
$ sudo service fess start
or
$ sudo systemctl start elasticsearch.service
$ sudo systemctl start fess.service
■ Windowsのサービスとしても登録可能
■ インストールガイドを参照
➔http://fess.codelibs.org/ja/10.3/install/index.html
http://localhost:8080/ にアクセス
デモ環境: http://search.n2sm.co.jp/
検索画面
PC版 スマホ版
検索
検索
■ 検索テキストフィールドに検索語を入力
➔AND検索
➔OR検索
➔NOT検索
➔範囲検索
➔ワイルドカード検索
➔フィールド指定検索
➔あいまい検索
➔ソート(ファイル名、日付、サイズ、クリック数等)
■ 検索対象数はElasticsearchクラスタに依存
■ テキストが取得できるファイルが検索対象
ロール検索
■ 認証状態により検索結果を出し分ける
➔Fessにログインしているユーザー情報を利用する
➔ログインすれば、ロール検索が適用される
➔AD連携して、共有フォルダ検索等に利用
■ クロール時に権限情報を付加する
➔クロール設定で権限情報を指定可能
➔Sambaクロールの場合はファイルの権限が付加される
クロール
クロール種類
■ 3種類のクロール方法
➔ウェブ:http, https
➔ファイルシステム:file, smb, ftp
➔データストア:DB, CSV, Elasticsearch
■ 独自の外部システムを対象にする場合
➔データストアのI/Fを実装する
➔例:GitBucket連携
(https://github.com/codelibs/gitbucket-fess-plugin)
ウェブクロール
■ HTMLファイルのリンクをクロールする
➔WWWサイトやイントラサイトを検索対象にする場合
➔リンク構造を辿ってクロールする
➔JavaScript的なHTMLサイト以外は検索可能にできる
■ 正規表現でクロール対象を制御可能
■ BASIC/Digest/NTLM/FORM認証に対応
■ リクエストヘッダーを付加可能
インターネット
イントラネット
Fess
http://〜
https://〜
ファイルシステムクロール
■ 階層的なディレクトリ構造をクロールする
➔共有フォルダ等を検索対象とする場合
➔指定したディレクトリ以下をクロールする
■ SambaやFTPの認証に対応
■ file:へのアクセス問題への対応
■ 共有フォルダはファイルの権限情報を取得
➔AD連携で自動で閲覧権限を設定
ファイルサーバ等Fess
file://〜
smb://〜
ftp://〜
データストアクロール
■ いろいろなデータソースをクロールする
➔DBのデータを検索対象にする場合
➔外部のデータ群を検索対象にする場合
■ 対応可能なデータベース
➔JDBCドライバが提供されているもの
➔SELECT文を書いて、インデックスにマップする
■ CSVファイルリストをクロール
➔NASなどのファイル更新ログで差分更新
➔数TB以上の大規模ファイルシステム向け
■ DataStoreを実装すれば何でも検索可能
DBや独自システムFess
何でも可
DataStore
public interface DataStore {
// クロール設定が渡されるのでそれを元にcallbackにドキュメントを渡す
void store(DataConfig config, IndexUpdateCallback callback,
Map<String, String> initParamMap);
// 処理を停止するときに呼ばれる
void stop();
}
その他
■ ラベル
➔検索対象にラベル(タグ)付けして、検索可能
■ キーマッチ
➔登録された検索語での検索時にブーストする
■ ドキュメントブースト
➔特定の条件にマッチするものをブーストする
■ 重複ホストの正規化
➔例:codelibs.org→www.codelibs.org
検索処理
検索処理
■ 多言語対応のハイブリット検索
➔ 日本語はbi-gram/形態素解析のハイブリット検索
■ 標準フィールドと各言語用フィールドを作成
➔ 例:titleとtitle_jaなど
■ 標準フィールド:bi-gram(standard_analyzer)
➔ 英数字はワード(文字数上限を設定)&ステミング
➔ マルチバイトはbi-gram
■ 形態素解析
➔ 標準ではkuromojiを利用
➔ kuromoji-neologdプラグインで差し替え可能
■ ブラウザの言語で言語用フィールドをブースト
辞書管理
■ 各種辞書を管理画面で編集可能
➔形態素解析(Kuromoji, Seunjeon)
➔同義語
➔文字マッピング
➔ステミング除外単語
■ Kuromojiと同義語は再起動なしに反映
■ 辞書情報はElasticsearchにHTTPで送信
検索クエリー変換
■ 検索語をQuery DSLに変換
➔ElasticsearchのQuery Stringを利用していない
➔Fessが検索語を解析してQueryDSLを生成
➔LuceneのSyntax Parserをベースにしている
➔Fessではフィールド指定を制御している
➔タイトルと本文をor検索(ブースト付きで)
Fess AND 使い方
{
“query”: {
“bool”: {
“must”: [
{“match_phase”: {“title”:”Fess”}},
…
}
},
“offset”: 0
“size”: 20
}
管理機能
管理画面
■ adminでログイン
検索画面管理
■ 管理画面で検索画面の編集できる
➔管理画面で検索画面のJSPを編集可能
■ 画像やCSS等のアップロードや削除も可能
ジョブ管理
■ 定期実行する処理をジョブとして登録・管理
➔クロールの実行もジョブとして管理
➔ログやキャッシュのパージ処理等もジョブで登録
■ cron形式で実行時間を指定
■ Groovyで任意の処理を記述可能
ユーザー管理
■ ユーザー情報を管理
➔ユーザー、ロール、グループを編集可能
■ 管理者はadminロールを持つ
■ ロール検索のユーザーを登録可能
■ LDAP同期して管理可能
認証システム連携
■ 外部の認証システムと連携可能
➔LDAP
➔Active Directory
➔OpenID Connect
■ SSO対応(Windows統合認証に対応)
■ SsoAuthenticatorを実装することで追加可能
検索対象システム
Fess
AD/LDAP等
利用者 認証問い合わせ
SsoAuthenticator
public interface SsoAuthenticator {
// ログイン情報を返す
LoginCredential getLoginCredential();
}
public interface LoginCredential {
// 保存する情報は認証方法に依存
}
// 例
public class UserPasswordCredential implements LoginCredential {
protected final String user;
protected final String password;
...
}
検索ログ
■ 検索ログをfess_logインデックスに保存
➔検索語
➔検索結果のクリック
➔利用者
➔お気に入り
■ Kibanaの利用を想定
➔Fess 9までは管理画面上に表示していた
サジェスト
■ サジェスト機能を独自に実装
➔検索ログとコンテンツから生成
➔日本語の読みの入力にも対応
■ 管理画面で手動で登録や除外も可能
検索API
■ 検索結果をJSONやXML等で取得可能
➔JSON形式
➔Google Search Appliance互換形式
■ アクセストークンによりロール検索も可能
■ WebApiManagerを実装することで追加可能
WebApiManager
public interface WebApiManager {
// リクエストが処理すべきなものか判定
boolean matches(HttpServletRequest request);
// リクエストを処理(サーブレットフィルタ上で処理されている)
void process(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws IOException, ServletException;
}
システム構成
アーキテクチャ
すぐ利用できるようにオールインワンで提供
LastaFlute
Elasticsearch
Fess Crawler
Lasta DI
ESFlute
Tomcat Boot
Fess
Elasticsearchは切り離すことも可能
ディレクトリ構成
├── app
│ ├── META-INF
│ ├── WEB-INF
│ ├── css
│ ├── images
│ └── js
├── bin
│ ├── fess
│ └── fess.in.sh
├── es
│ ├── data
│ └── plugins
├── lib
│ └── classes
├── logs
└── temp
Fessのアプリケーション
warを展開したもの
実行スクリプト
Elasticsearch
・data: インデックスの格納場所
・plugins: プラグイン
ログファイル
一時ファイルファイル
Tomcat Boot関連ファイル
標準でElasticsearchを同梱している
〜Fluteシリーズ
FessではDBFluteを始めとする様々な〜Fluteライブラリを使用しています!
■ DBFlute: DB変更に強いO/Rマッパ&ツール群
■ LastaDI: DIコンテナ
➔Seasar2からフォークしてJava8対応
■ LastaFlute: Java8対応のWebフレームワーク
➔リーンスタートアップ&インクリメンタル開発向け
➔SAStrutsからフォークして発展
■ LastaJob: ジョブスケジューラ
■ ESFlute: Elasticsearch向けのO/Rマッパ
■ MailFlute: メール送信ライブラリ
➔テンプレートなども利用可能
■ UTFlute: newしたものにDIできるJUnit拡張
利用しているElasticsearchプラグイン
■ Elasticsearchはプラグインにより拡張
■ Analysis系プラグイン
➔analysis-ja: 日本語処理 (日本語以外も含む…)
➔analysis-synonym: 同義語処理
➔analysis-fess: Fess用言語処理
■ LangFieldプラグイン
➔インデックス対象の言語自動判定
■ ConfigSyncプラグイン
➔辞書をクラスタに配布
■ DataFormatプラグイン
➔各種形式でデータのダウンロード(バックアップで利用)
ユースケース
ユースケース (連携方法など)
■ スタンドアロンサーバでの連携
■ JavaScriptでJSONを取得して連携
■ サーバでJSONを取得して連携
スタンドアロンサーバでの連携
■ 利用者はFessからHTMLで検索結果を取得する
■ Fessの検索画面(JSP)を編集する
検索対象システム
Webアプリ
Fess
クロール
利用者
http://www.〜
http://search.〜
HTML
HTML
画面は管理画面で編集可能
JavaScriptでJSONを取得して連携
■ 利用者はFessからJSONで検索結果を取得する
■ 検索結果画面はJavaScriptで作成する
検索対象システム
Webアプリ
Fess
クロール
利用者
http://www.〜
http://search.〜
HTML
JavaScriptで検索結果を
取得&描画する
JSON
サーバでJSONを取得して連携
■ 利用者はFessに直接アクセスはしない
■ ウェブアプリがAPIでFessにアクセスする
■ Fessを検索APIサーバとして利用する
検索対象システム
Webアプリ
Fess
クロール
利用者
http://www.〜
HTML
ウェブアプリ等で
検索結果を取得する
検索API
JSON
など
開発情報
開発概要
■ GitHubでソースコードを管理
■ Mavenプロジェクトとして構成
■ 組み込みTomcatのウェブアプリ
➔Java 8
➔〜Fluteシリーズ
➔組み込みElasticsearch
■ Tomcatで動く普通のJavaのウェブアプリ
■ 画面はJSPで作成
http://fess.codelibs.org/ja/dev/getting-started.html
開発するためには
■ GitHubからソースコードをClone
■ Elasticsearchプラグインのダウンロード
➔mvn antrun:run
■ ソースコードの自動生成 (必要に応じて)
➔mvn dbflute:freegen
■ org.codelibs.fess.FessBootを(デバッグ)実行
➔http://localhost:8080/ にアクセス
■ 上記でウェブアプリ部分をデバッグ可能
■ 各種パッケージ生成
➔mvn package rpm:rpm jdeb:jdeb
クロール部分の開発するためには
■ クロールは別プロセスとして実行
➔FessBootからデバッグできない
■ ジョブで実行するものはリモートデバッグ
➔管理画面でジョブの設定で.remoteDebug()を追加する
➔IDEで8000番をリモートデバッグ
■ クロールとインデクシングで異なるスレッド
まとめ
まとめ
■ Fessはオープンソースの全文検索システム
■ Apacheライセンスで提供
■ Javaベースのアプリケーションサーバ
■ 様々な場所で利用できる

More Related Content

Viewers also liked

検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法kbigwheel
 
Tensor Decomposition and its Applications
Tensor Decomposition and its ApplicationsTensor Decomposition and its Applications
Tensor Decomposition and its ApplicationsKeisuke OTAKI
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムShinsuke Sugaya
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法Shinsuke Sugaya
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバShinsuke Sugaya
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Shinsuke Sugaya
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発Shinsuke Sugaya
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Yasushi Hara
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめtakezoe
 
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
 [DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent [DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient DescentDeep Learning JP
 
TensorFlowで逆強化学習
TensorFlowで逆強化学習TensorFlowで逆強化学習
TensorFlowで逆強化学習Mitsuhisa Ohta
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回Naoyuki Yamada
 
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessElasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessShinsuke Sugaya
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep LearningSeiya Tokui
 

Viewers also liked (15)

検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法
 
Tensor Decomposition and its Applications
Tensor Decomposition and its ApplicationsTensor Decomposition and its Applications
Tensor Decomposition and its Applications
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
 
AI社会論研究会
AI社会論研究会AI社会論研究会
AI社会論研究会
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ
 
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
 [DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent [DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
 
TensorFlowで逆強化学習
TensorFlowで逆強化学習TensorFlowで逆強化学習
TensorFlowで逆強化学習
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
Elasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFessElasticsearchベースの全文検索システムFess
Elasticsearchベースの全文検索システムFess
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep Learning
 

More from Shinsuke Sugaya

社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウShinsuke Sugaya
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようShinsuke Sugaya
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Shinsuke Sugaya
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画Shinsuke Sugaya
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門Shinsuke Sugaya
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールShinsuke Sugaya
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成Shinsuke Sugaya
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessShinsuke Sugaya
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessShinsuke Sugaya
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索FessShinsuke Sugaya
 

More from Shinsuke Sugaya (12)

社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFess
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索Fess
 

全文検索システムFessを用いた検索システム構築入門