こんばんは。流浪の検索エンジン、知禅です。
諸事情により、ojizoから「知禅」に再リブランドしました。
ojizoで突き進もうと考えており、商標の出願を検討しておりました。
あ。
出願されておった。。。
ここはスパッと諦め、別の名前を考えることにしました。
候補はいくつかありましたが、漢字で意味がすぐ伝わる「知禅」で落ち着きました。
考えている時、お茶の本で知った茶禅を参考に作った単語です。
中国語だと「禅を知る」という意味にもなるようで、悪くないかなと思っています。
今回は諸々出遅れないように準備したので、知禅で突き進もうと思います。
2017年12月14日木曜日
2017年11月16日木曜日
検索キーワードのサジェストが復活しました
昨日、しばらく機能していなかった検索キーワードのサジェストが復活しました。
原因はindex templateでした。
FESSの機能に、インデックスのsettingsやmappingsを予め用意する機能があります。
僕はこれを使って、「fess.*」という名称のindexが作られたら、FESSの中核インデックスが自動で生成されるように設定しました。
これがまずかった。
実は、サジェストもelasticsearchのindexに乗っているのですが、このindex名が「fess.suggest.yyyymmdd」なんです。
なので、index templateに沿ってメインのインデックスと同じ設定でサジェスト用のインデックスが作られていた、というわけです。
index templateを削除したら、あっさりサジェストが回復しました。
いやぁ、自分でも設定したことを忘れてました。
原因はindex templateでした。
FESSの機能に、インデックスのsettingsやmappingsを予め用意する機能があります。
僕はこれを使って、「fess.*」という名称のindexが作られたら、FESSの中核インデックスが自動で生成されるように設定しました。
これがまずかった。
実は、サジェストもelasticsearchのindexに乗っているのですが、このindex名が「fess.suggest.yyyymmdd」なんです。
なので、index templateに沿ってメインのインデックスと同じ設定でサジェスト用のインデックスが作られていた、というわけです。
index templateを削除したら、あっさりサジェストが回復しました。
いやぁ、自分でも設定したことを忘れてました。
2017年10月9日月曜日
はじめてのクラスタ破損
朝、目覚めのコーヒーを入れ、iPadでFessの管理画面に入ると。
帯が赤い。
クラスタ破損です。
一気に目が覚めました。
ざっとインデックスを眺めると、Fess.2017xxxxは正常。
.crawlerも正常。
.suggest関連がいくつか破損したようです。
重要なインデックスが破損していないことを確認して、おちついて朝食を食べます。
レプリカごと吹き飛んでしまったときは、_cluster/rerouteにPOSTで復旧させます。
es5.5で仕様が変わったようですね。
今回は復旧の見込みがないのと、大したデータが入っていないので、allocate_empty_primaryでシャードを戻します。
公式の解説はこちら。
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/cluster-reroute.html
fessはクラスタ操作をGUIから行えるので、「rest」のアイコンから操作します。
実行したのは以下の通り。
accept_data_lossを明示しないと、操作を受け付けません。
今回は大事に至りませんでしたが、バックアップや避難訓練は大切です。
レプリカを置いていても、やっぱりsnapshotは大事ですね。
帯が赤い。
クラスタ破損です。
一気に目が覚めました。
ざっとインデックスを眺めると、Fess.2017xxxxは正常。
.crawlerも正常。
.suggest関連がいくつか破損したようです。
重要なインデックスが破損していないことを確認して、おちついて朝食を食べます。
レプリカごと吹き飛んでしまったときは、_cluster/rerouteにPOSTで復旧させます。
es5.5で仕様が変わったようですね。
今回は復旧の見込みがないのと、大したデータが入っていないので、allocate_empty_primaryでシャードを戻します。
公式の解説はこちら。
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/cluster-reroute.html
fessはクラスタ操作をGUIから行えるので、「rest」のアイコンから操作します。
実行したのは以下の通り。
{shardには破損したシャードの番号、nodeはプライマリシャードを割り当てるノードを入れてください。
"commands": [
{
"allocate_empty_primary": {
"index": ".suggest_badword",
"shard": 0,
"node": "xxxxxx",
"accept_data_loss": true
}
}
]
}
accept_data_lossを明示しないと、操作を受け付けません。
今回は大事に至りませんでしたが、バックアップや避難訓練は大切です。
レプリカを置いていても、やっぱりsnapshotは大事ですね。
2017年9月15日金曜日
ojizoのWebクローラーは3種に分類しています
Webは常に変わり続けるため、適切な間隔でクローリングを続ける必要があります。
これが難しい。
昔は更新頻度を見て、ページを再訪する間隔を調整できました。
今は動的生成が多いので、ページの主たるコンテンツが変わっていないか判断しないとなりません。
アルゴリズムで主コンテンツを見抜くのは大変です。
ここはojizoらしく、おおよそで調整することにしました。
いろいろなクロール設定を試してきましたが、およそ3種類に分けられることが分かりました。
・大半のページは3階層目まで
・更新頻度が高いページは特製の正規表現で1階層目まで
・良質なコンテンツを多数保有するサイトは深くまで
ojizoのDefault Crawlerは、主ページから3階層目までを巡回するようにしています。
現在は3日で500万ページを巡回するため、2週間以内に全件をクロールできる設計です。
Fessでは「状態」を「有効」にしておきます。
続いて、更新頻度が高いページ。
報道なんかが該当します。
これはサイトごとに正規表現を駆使して、頻度が高い有用なページだけを巡回します。
Fessでは「状態」を「無効」にして、Webクローラーを新しく作成して対応します。
最後に深いクローラー。
これも、コンテンツに関連するページだけを巡回するよう、サイトごとに正規表現を調整します。
これも「状態」を「無効」にして、Default Crawlerと分離して管理します。
サイトの全件をくまなくクロールさせるのは困難です。
ある程度、割り切りをうまくつけてゆきたいと思います。
2017年9月13日水曜日
大公開、ojizoの作り方
ojizo(旧Nyafoo!)はオープンソースのFessを使って構築しています。
ですので、ojizoというかFessベースのWeb検索エンジンは、誰でも作れるといえば作れるサービスです。
ひとつだけ面倒臭いというか、莫迦莫迦しい所がホワイトリストを使っていることでしょう。
隠すほどの事ではないので種明かしすると、ojizoはURL正規表現の塊です。
それ以外は、全部Fessです。
5,000サイト以上を正規表現で記述しています。
ひょっとしたら1万サイトを超えているかもしれません。
僕にも正確な数がわからない状態です。
1万サイトを目視して、URLリストを作り、正規表現で巡回先を記述したのか?
正解。
技術もへったくれもありません。
莫迦だと思った人は正しいです。
そう、ojizoは莫迦莫迦しい作業を積み重ねてできています。
例えば、新聞社がありますよね。
日本に100社ぐらいあるのですが、これをひとつひとつ目視で確認して、正規表現で記述してFessに登録します。
上場企業は2,000社近くありますが、これもひとつひとつ目視します。
都道府県庁、自治体、観光協会、農協、その他。
ひとつひとつ調べ、テキストエディタにURLを保存して、正規表現で巡回先を記述して、Fessに登録します。
登録して、クローラーを巡回させて、うまく行かないところは手直しして。
これを数千回繰り返します。
Yahoo! JAPANですら、人手によるサイト登録はあきらめてしまいました。
祖業であるディレクトリを終了するそうです。
巨人から見たら、ディレクトリを作るのは割に合わないのでしょう。
でも、巨人があきらめたから生まれる市場もあると思うんですよね。
なので、自分が嫌になるまでojizoのリストを作り続けようと思います。
ですので、ojizoというかFessベースのWeb検索エンジンは、誰でも作れるといえば作れるサービスです。
ひとつだけ面倒臭いというか、莫迦莫迦しい所がホワイトリストを使っていることでしょう。
隠すほどの事ではないので種明かしすると、ojizoはURL正規表現の塊です。
それ以外は、全部Fessです。
5,000サイト以上を正規表現で記述しています。
ひょっとしたら1万サイトを超えているかもしれません。
僕にも正確な数がわからない状態です。
1万サイトを目視して、URLリストを作り、正規表現で巡回先を記述したのか?
正解。
技術もへったくれもありません。
莫迦だと思った人は正しいです。
そう、ojizoは莫迦莫迦しい作業を積み重ねてできています。
例えば、新聞社がありますよね。
日本に100社ぐらいあるのですが、これをひとつひとつ目視で確認して、正規表現で記述してFessに登録します。
上場企業は2,000社近くありますが、これもひとつひとつ目視します。
都道府県庁、自治体、観光協会、農協、その他。
ひとつひとつ調べ、テキストエディタにURLを保存して、正規表現で巡回先を記述して、Fessに登録します。
登録して、クローラーを巡回させて、うまく行かないところは手直しして。
これを数千回繰り返します。
Yahoo! JAPANですら、人手によるサイト登録はあきらめてしまいました。
祖業であるディレクトリを終了するそうです。
巨人から見たら、ディレクトリを作るのは割に合わないのでしょう。
でも、巨人があきらめたから生まれる市場もあると思うんですよね。
なので、自分が嫌になるまでojizoのリストを作り続けようと思います。
2017年9月12日火曜日
「当たる」検索エンジンを作るには
「当たる」検索エンジンって何でしょうか。
入力されたクエリ(キーワード)に沿ったページが出てくるもの。
これが当たる検索エンジンと言えるでしょう。
当たる検索エンジンを作る基礎が、インデックス数、形態素解析、評点(ランキング)の3つだと思います。
インデックス数は蓄積したWebページの数ですね。
インデックスに無いものは探すことができません。
ちなみに現在、ojizoのインデックスは1,400万件を超えています。
初期の商用検索エンジンぐらいの規模でしょうか。
Googleがダントツで凄かった理由の一つでもあります。
当時の検索エンジンは、Sunのワークステーションとインクトミなどの商用検索システムで構築されていました。
どっちも高価です。
対して、GoogleはGFS(Google File System)という、ホワイトボックス(組み立てパソコン)を大量にLANに接続して、大規模なインデックスを保存する仕組みを持っていました。
PageRankだけでなく、インデックスを安価に蓄積できる仕組みも持っていたんですね。
続いて、形態素解析。
普通に暮らしていたら、まず聞かない単語だと思います。
形態素解析。
これは、日本語のように単語が特定のルールで区切られない言語で必要な分野です。
英語はすべての単語がスペースで区切られるルールになっています。
すべて。100%。これはコンピュータには都合が良いルールです。
対して、日本語は明確な区切り文字がありません。
形態素を使わずに、単純に「京都」に合致する文書を「当たり」と見なすとどうなるでしょう。
「東京都」まで合致してしまいます。
このため、「京都」は京都だけど、「東京都」は京都じゃない、という処理が必要です。
これが形態素解析の概略です。
(実は僕もあまり詳しくないです)
最後に評点。クエリに対して一定のアルゴリズムで評価を加え、適合度順に並べます。
初期の検索エンジンは、単語の出現度合いや単語間の距離などで評価していました。
Google躍進のきっかけになったPageRankも評点のアルゴリズムです。
今のGoogleはPageRankの割合は低いと聞きます。
もっと複雑なアルゴリズムを使っているのでしょう。
ojizoの評価アルゴリズムは、ものすごく原始的で単純です。
ojizoでは、単純なアルゴリズムで満足のゆく結果を得るために、インデックスするコンテンツを限定する方向でサービスを組み立てています。
Googleと真逆の考え方ですね。
Fessは優れたパッケージで、すぐに検索システムを立ち上げることが可能です。
みなさんも、興味を持った分野から研究してはいかがでしょうか。
入力されたクエリ(キーワード)に沿ったページが出てくるもの。
これが当たる検索エンジンと言えるでしょう。
当たる検索エンジンを作る基礎が、インデックス数、形態素解析、評点(ランキング)の3つだと思います。
インデックス数は蓄積したWebページの数ですね。
インデックスに無いものは探すことができません。
ちなみに現在、ojizoのインデックスは1,400万件を超えています。
初期の商用検索エンジンぐらいの規模でしょうか。
Googleがダントツで凄かった理由の一つでもあります。
当時の検索エンジンは、Sunのワークステーションとインクトミなどの商用検索システムで構築されていました。
どっちも高価です。
対して、GoogleはGFS(Google File System)という、ホワイトボックス(組み立てパソコン)を大量にLANに接続して、大規模なインデックスを保存する仕組みを持っていました。
PageRankだけでなく、インデックスを安価に蓄積できる仕組みも持っていたんですね。
続いて、形態素解析。
普通に暮らしていたら、まず聞かない単語だと思います。
形態素解析。
これは、日本語のように単語が特定のルールで区切られない言語で必要な分野です。
英語はすべての単語がスペースで区切られるルールになっています。
すべて。100%。これはコンピュータには都合が良いルールです。
対して、日本語は明確な区切り文字がありません。
形態素を使わずに、単純に「京都」に合致する文書を「当たり」と見なすとどうなるでしょう。
「東京都」まで合致してしまいます。
このため、「京都」は京都だけど、「東京都」は京都じゃない、という処理が必要です。
これが形態素解析の概略です。
(実は僕もあまり詳しくないです)
最後に評点。クエリに対して一定のアルゴリズムで評価を加え、適合度順に並べます。
初期の検索エンジンは、単語の出現度合いや単語間の距離などで評価していました。
Google躍進のきっかけになったPageRankも評点のアルゴリズムです。
今のGoogleはPageRankの割合は低いと聞きます。
もっと複雑なアルゴリズムを使っているのでしょう。
ojizoの評価アルゴリズムは、ものすごく原始的で単純です。
ojizoでは、単純なアルゴリズムで満足のゆく結果を得るために、インデックスするコンテンツを限定する方向でサービスを組み立てています。
Googleと真逆の考え方ですね。
Fessは優れたパッケージで、すぐに検索システムを立ち上げることが可能です。
みなさんも、興味を持った分野から研究してはいかがでしょうか。
2017年9月10日日曜日
ojizoイメージイラストを公開しました
7月から準備を進めていた、ojizoのイメージイラストが完成しました。支援者限定コンテンツです。
公開サイト(Enty)
https://enty.jp/x8Yel22
「カフェちゃんとブレークタイム」など、多方面で活躍しているポルリン先生に、キャラデザインとイラストをお願いしました。
旧Nyafoo!のイメージを生かしながら、元気で知的な感じに描いてもらえたと思っています。
「Entyの支援金を集め、クリエイターに適正な報酬を支払って、オリジナルのコンテンツを拡充する」という、僕のもう一つのモデルが動き始めました。
これから、オリジナルのコンテンツを増やしてゆきますので、今後ともよろしくお願いいたします。
公開サイト(Enty)
https://enty.jp/x8Yel22
「カフェちゃんとブレークタイム」など、多方面で活躍しているポルリン先生に、キャラデザインとイラストをお願いしました。
旧Nyafoo!のイメージを生かしながら、元気で知的な感じに描いてもらえたと思っています。
こんな感じの子です。
「Entyの支援金を集め、クリエイターに適正な報酬を支払って、オリジナルのコンテンツを拡充する」という、僕のもう一つのモデルが動き始めました。
これから、オリジナルのコンテンツを増やしてゆきますので、今後ともよろしくお願いいたします。
登録:
投稿 (Atom)