はてだBlog(仮称)

私的なブログど真ん中のつもりでしたが、気づけばWebサイト系のアプリケーション開発周りで感じたこと寄りの自分メモなどをつれづれ述べています。2020年6月現在、Elasticsearch、pandas、CMSなどに関する話題が多めです。...ですが、だんだんとより私的なプログラムのスニペット置き場になりつつあります。ブログで述べている内容は所属組織で販売している製品などに関するものではなく、また所属する組織の見解を代表するものではありません。

Elasticsearch

ElasticsearchのAggregations(nested,reverse_nested,parent,children)の例

はじめに ElasticsearchのAggregationsのnested,reverse_nested,parent,childrenについては次の過去記事ではごまかして説明をスキップしたので、あらためてまとめてみました。 itdepends.hateblo.jp まとめてみた... と言っても、公式の例を筆者なりに噛み砕…

ElasticsearchのAggsで「グループ内で最大値をとるレコードを抽出する」風の実現例(邪道流)

はじめに Elasticsearchでは、SQLでいうところのGROUP BYに近い挙動となるAggregationsというクエリがあります。 ここ何回かの過去記事でもAggregationsをちょいと雑に俯瞰する記事を投稿しました。 itdepends.hateblo.jp なおこのAggregationsですが、GROUP…

Elasticsearch のPipeline aggregationsのさわり

ElasticsearchのPipeline aggregationsは、ElasticsearchでSQLのHavingっぽいことが可能になるしかけです*1。 www.elastic.co これまた品揃えが豊富で、今確認したら、20種類近くあるようですが、次のBucket aggregationsや Metrics aggregationsの記事と同…

ElasticsearchのBucket aggregationsのさわり

ElasticsearchのAggregationsは種類が豊富ゆえに、嬉しい悲鳴なのですが、私のようなメモリが小さい人間はどれがどれというところの理解が大変です。 実際は、似た演算は、クエリの形とパラメータ、得られるバケット(演算結果)の形式が似ているので、同じ…

ElasticsearchのMetrics aggregationsのさわり

ElasticsearchのMetrics aggregationsは、その名の通り?統計的なAggregationsです。 www.elastic.co 機能充実はありたがたいもののその分だけ数も多いですね。 それぞれの名称、SQLや他の言語などでの関数名と類似性から、得られる値や使い方は同じような用…

Elasticsearchアナライズ時に派生型のプラグインを使う場合の雑図解(関連:edge_ngramやmultiplexer)

はじめに 私なぞは、検索時とインデックス時のアナライザーは同じものにしとく(つまりデフォルト)方が検索エンジンが賢いのでよしなにやってくれる派(という名のモグリ)なのですが、 edge_ngramやmultiplexerのような「トークン複数派生」的なアナライザー…

Elasticsearch のmatch_phraseで多少のあいまい度を許容する姑息なアイディア例

はじめに Elasticsearchのmatch_phraseで語順を意識して検索したいけど、多少は外れてたやつも下位で良いのでヒットさせたいよねという例をサカナにanalyzeの頭の体操をしてみましたの例です。 確認はver6.8で実施しましたが、基本は7系でも動作すると思いま…

N-Gramは部分一致っぽく当たるがそうでもないこともあるのは使い方次第(Elasticsearchを例にしてなんとなく説明)

Elasticsearchに限らずですが、検索エンジン案件ぽい話の際に、SQL/RDB界隈の部分一致検索のメタファーでN-Gramでの検索を語ることになりつつも、 結果、「部分一致」の先入観からかえってわかりにくくなる面もあって悩ましいということもなくはない...ので…

Elasticsearchで辞書で頑張らずにN-Gramでやりくりするちょっとした例(それがうまくいく利用シーンを選んだだけとも言う)

そろそろきりの良いエディション、バージョンでのElasticsearchに関する俺々ポエムを吐き出し切っておきたいと思う今日この頃です。 itdepends.hateblo.jp さて、上記の過去記事あたりで「マイフェイバリット」としてAnalyze設定について講釈を述べましたが…

ElasticsearchでBM25でなくPainless Scriptによるカスタム評価式で類似度スコアリング

はじめに Elasticsearchでは、検索語に対してあるドキュメントのあるフィールドの類似度を評価してリストの並び順を制御します。 この評価関数はBM25がデフォルトだそうですが、BM25やその由来のTF/IDFではどうも高級すぎて少し使いづらい時があります(ある…

Elasticsearchのネストしたaggsの検索結果をflat形式で戻してくれるComposite aggregationのさわり

拙ブログに、「Elasticsearch aggs/aggregations flat」で検索して迷いこむ方がいらっしゃるようです。 「flat」というところから、もしかして?、と思いまして、あらためて Elasticsearch のAggregationのひとつのCompositeに入門してみましたので、せっかく…

Elasticsearch のMore Like This Queryを使ってみた(グルメ的に似たエリアを検索)

Elasticsearch のMore Like This Query(以下MLT)を使ってみました。 More Like This Query(MLT)について MLTの類似度の考え方(の雑な説明) Elasticsearch MLT での実際の検索方法 [補足] MLTはElasticsearch 検索DSLの一種 ★実際にやってみる 前説 手順 (1)…

Elasticsearchで検索〜pandasのDataFrameに格納(私的なスニペット)

Elasticsearchとpandasという組み合わせでいうと、Elasticsearchの公式サイトでも紹介があるeland | Elasticなのかなと思います。 しかしながら、ElandでElasticsearchの検索クエリをかませて、それをDataFrameに入れる方法が(おそらくそのような機能を具備…

Elasticsearchにlivedoorレストランデータセットを取り込んでみる(Pandasで全文検索向けにプレデータ加工あり)

Elasitcsearchで「全文検索」寄りでいろいろ遊んでみようと思うと、程よい公開データが欲しくなります。 そんなデータの一例として、livedoorレストラン DataSetというのがありますので、こちらを利用させてもらって勉強するというのも一つの手かと思います…

Elasticsearch AggregationsとPost filter(post_filter)

一つ前のこちら↓の記事で、ElasticsearchのAggregationsのシンタックス例を挙げてみました。ElasticsearchのAggregationsでしばしば話題になるトピックを忘れていましたので、補足します。 itdepends.hateblo.jp 具体的には、Post filterの話です。 www.elas…

Elasticsearch のAggregations(livedoorレストランデータセットを取り込み試してみる)

livedoor グルメの DataSet をElasticsearchに取り込んで、Aggregations(aggs)を試してみた、の例です。 Aggregationsは、SQLでいうところのgroup byに近い演算です。グループ化や集計対象が、SQL(RDB)の場合はカラムの値なのに対し、転置インデックスの格納…

ElasticsearchのSearchTemplate

Elasticsearchには、Search Templateという、よく使うクエリをElasticsearch自体に登録して、それをテンプレートにして検索クエリの一部を差し替えたような検索ができます。 使い所によって、共通化、タイプ量削減、設計方針の強制、コンセプトの共有、いろ…

Elasticsearch GEO系検索を試してみる2

この記事は、ElasticsearchのGEO系検索のうち、GeoShape DSL(geo_shape)を試してみたものになります。 次の記事の続きです。 itdepends.hateblo.jp また、次の別の記事でGeoPandasを使って(あまりシェープファイルやGeoJSONといったGIS用データ形式がわかっ…

Elasticsearch GEO系検索を試してみる(Geo-polygon、Geo-shape関連)

ElasticsearchのGEO系検索のうち、ポリゴンをからめた検索について試してみました。 www.elastic.co なお、試したのはElasticsearch 6.8ですが、7系に橋渡ししやすいクエリやMapping設定の記述としたつもりです。ただし、紙面の都合・その他の理由によりでve…

続:Elasticsearch のバルクロード用JSON Lines ファイルをselectする toy スクリプト(ソートなど追加)

概要 この記事は次の記事の続きです。Elasticsearchのバルクロード用のJSON LinesファイルをイメージしたJSONの簡易フィルターコマンド相当のPythonでのツール例です。 経緯は下記の記事のとおりです。いわゆる拙作ではありますが、前回記事を書いたのちに自…

Elasticsearch のバルクロード用JSON Lines ファイルをselectする toy スクリプト

概要 Elasticsearchのバルクロードは次の形式なのですが、ふと必要にかられてこんな形の2行1ペアのJSON Linesファイルから、なんちゃってselectを行うトイプログラムを作成してみました。 PUT hockey/_bulk?refresh {"index":{"_id":1}} {"first":"johnny","…

Elasticsearch のFunction score queryで得られたスコアに後付けで細工する

はじめに 何度目かのElasticsearchのオレオレスコアリング論まとめです。 この記事をまとめるきっかけとして、Elasticsearch ver7系におけるScript score queryなるもので、今までできなかった(?)BM25などから得られた関連度に細工ができるようで、これは知…

Elasticsearch script query によるフィールド間の関係による検索絞り込み

この記事の内容 本記事では、Elasticsearchのscript query について、クエリ例を列挙しています。 この記事の内容 script queryの使い所(と筆者が思うところ) script query 実例 ◆インデックスの設定 ◆サンプルデータ登録 ◆クエリ例 (1) Aが1より大きいも…

続・Elasticsearchのひらがなでの検索時のトリックについて雑談(漢字ひらがな混在の場合について深掘り と  Multiplexer filterの練習もかねて)

はじめに この記事は、次の記事の続きです。 itdepends.hateblo.jp 前の記事では、ひらがな(読み仮名)→漢字にフォーカスしましたが、ここでは、ひらがなの単語の複合語や漢字とひらがなの混合の複合語などででヒットさせるにはということで膨らませてみま…

Elasticsearchのひらがなでの検索時のトリックについて雑談

はじめに Elasticsearch(kuromoji)では、アナライザーに「kuromoji_readingform」というものがあり、これを使うと「読み」に関して、表記揺れや曖昧検索相当に対応できます。 ただし、この「読み」部分については、実は、kuromojiの形態素解析(分かち書き/to…

Elasticsearchで読みの頭文字で並び替える怠惰な方法の例(just idea)

1. はじめに この記事は、ある検索系の問題設定において、できるだけElasticsearchの機能に閉じて*1手軽にやれるかどうか、という、よくある100本ノック風のチャレンジ(1本だけですが)のメモです。 図らずも、Elasticsearchのアナライズの解説っぽいところ…

検索エンジンでのルックアップ検索型方式に関する講釈とdis_max、constant_score(Elasticsearchを題材に)

はじめに 検索エンジンのスコアリング・チューニングは「関連度」がキモ...だが... このブログの前の記事で、「BM25」のような情報検索における関連度について、「使わせていただく立場」として載自分なりの講釈を述べてみました。 itdepends.hateblo.jp 関…

BM25を分かった気になるかもしれない邪道な解説(?)

1. はじめに このブログではElasticsearchについて時々思い出したように書きなぐっております。 そしてこの記事では、Elasticsearchのデフォルトのスコアリング方式であるBM25について、数式が苦手でも、なんとなく分かった気になる(かもしれない)解説を試…

Elasticsearchの検索スコアリング(boost_mode、score_modeのsumとmultiplyの噛み合わせについてもう少し)

はじめに この記事は次の記事のちょっとだけ補足(つづき)です。 itdepends.hateblo.jp 記事の概要 前の記事では、ひとことでいうとスコアリングは文字通り加点方針(条件に該当するとプラスが重なる方針)がオススメみたいなところを示唆しておりました。 …

Elasticsearchの検索スコアリングの見定めに関する考察

はじめに この記事は次の記事のアナザーバージョン(切り口は少し違うが同じことを別の表現で表したもの)です。 itdepends.hateblo.jp itdepends.hateblo.jp とあるタイプの検索サイトのElasticsearchを使ったサービス設計などに関する私見(2019年改訂版) …