校異源氏物語テキストDBに対する検索を行うAPIサーバの構築したので、備忘録です。
https://genji-api.aws.ldas.jp/

以下のページで、『校異源氏物語』のテキストデータをTEI/XMLに準拠した形で公開しています。
https://kouigenjimonogatari.github.io/
このテキストデータをElasticsearchに登録し、コマごとの検索を可能にするAPIを作成します。
使い方#
以下のURLで、OpenAPIおよびSwaggerを用いた使い方の説明ページにアクセスできます。
https://genji-api.aws.ldas.jp/
工夫点#
検索語の展開#
例えば以下のURLは、「夕顔」を検索キーワードとした例です。JSON:APIに準拠した入出力形式としています。
https://genji-api.aws.ldas.jp/search?q=夕顔&page[limit]=20&page[offset]=0&sort=page&filter[expandRepeatMarks]=true&filter[unifyKanjiKana]=true&filter[unifyHistoricalKana]=true&filter[unifyPhoneticChanges]=true&filter[unifyDakuon]=true&filter[vol_str]=04 夕顔
この時、以下のような結果が返却されます。入力したキーワード「夕顔」に対して、バリエーションを生成し、これらに基づく検索を行います。
その結果、本文中に登場する「ゆふかほ」「夕かほ」「夕顔」を一度に検索することができます。

この検索キーワードの展開については、検索オプションをON/OFFを切り替えられるようにしています。詳細は、上述したSwagger UIでご確認ください。
Elasticsearchには、以下のようなOR検索を投げています。
変換に使用しているルールは以下で確認することができます。
https://genji-api.aws.ldas.jp/normalization/rules
まとめ#
不完全なところもあるかと思いますが、原文の表記揺れを吸収する仕組みを含めた検索用APIサーバの構築例について紹介しました。
参考になりましたら幸いです。