2013-01-01から1年間の記事一覧

Cypherにおけるdistinctとorder byの併用

そしてぬこは途方に暮れた。CypherのRETURN句には、distinctの指定とorder byの指定がある。order byの例 neo4j-sh (0)$ START i=node(1) MATCH p=i-[:SCHEMA]->s-[r:META*0..]->n RETURN n.name order by n.name ; ==> +-----------+ ==> | n.name | ==> +-…

Cypherの集合関数lastの挙動が変?

今日もぬこは激怒した。Cypherの集合関数として、 head tail last があるのだが、何故かlastだけうまく動作しないときがある・・・。headはOK。 neo4j-sh (0)$ START i=node(1) MATCH p=i-[:SCHEMA]->s-[r:META*0..]->n RETURN r, head(r); ==> +-----------…

pg_bigmとpg_trgmの併存

Fujii先生からのツッコミ 昨日、pg_bigmの検証のエントリを書いた後、作者(か或いは作者に近い立場と思われる)のFujii Masaoさんから、以下のコメントをもらった。 @nuko_yokohama BTW you can easily register pg_bigm and pg_trgm to the same database at…

pg_bigmを動かしてみた

kasa_zipさんのツイート 今朝、いつものようにツイートをチェックしてたら、kasa_zipさんのツイートが目に留まった。 あれ、pg_bigmリリースしたんだ? むむむ、pg_bigmとな。名前から想像するにPostgreSQL標準の全文検索モジュールpg_trgmのbi-gramバージョ…

CypherのDELETEがうまく動作しない?

ぬこは激怒した。さっきの続き。 まあ、さっきの問題は些か汚い方法だが、not()で反転させれば所定のノード群を得ることはできる。 neo4j-sh (0)$ START n=node(*) WHERE not(n.delete_flag? = false) RETURN n; ==> +-------------------------------------…

CypherのWHERE句評価の怪

こんなの絶対おかしいよノードに新規にプロパティをセットする。 START n = node(・・・) MATCH ・・・ SET delete_flag = true RETURN n;こうするとMATCH句に合致するノードに対してdelete_flagというプロパティをtrueで追加してくれる。で、その後に START…

PostgreSQL REST API

最近、グラフデータベース Neo4jへのCypherクエリをRESTで投げるなんてことをやってるんだけど、そういえばPostgreSQL用のREST APIってないのかな・・・と思ったらまだ検討中というステータスなのか。 HTTP API - PostgreSQL wiki

CypherでノードIDを得る

今日、初めて知ったんだけど、CypherでノードのIDを取得するために、id(node)みたいな関数があるんだな。知らんかった。 $ curl -H 'Content-Type: application/json; charset=UTF-8' -X POST -d '{"query":"START n=node(*) RETURN id(n), n.name,n.gender?…

neo4j_fdw プロトタイプ

今月にはいってコツコツと合間をみて開発していた、neo4j_fdwのプロトタイプがやっとできた。 このプロトタイプはオープンソースのグラフデータベース neo4j を情報源にしたFDWだ。 実行例 Neo4j上でテキトーにノードとエッジを張っておく。 で、これを情報…

JSON-Cを使って値を取り出す

Cコード上でJSONをパースして値を取得するために、今回はJSON-Cを使うことにする。 これという選定基準はなく、JSONのページを調べて目についたので使ってみたというだけ。幸いライセンスもMITなので使いやすそうだ。が、ドキュメントとサンプルコードの備え…

libcurlからCypherクエリを発行する

ちょっとHTTPHEADERの設定のところで嵌っていた(見つけたサンプルが間違っていた・・・結局、curl.hを見て解決したけど)が、なんとかlibcurlを使ってREST APIからCypherクエリを発行し、Neo4jサーバから結果(JSON形式)を取得することができた。備忘のために…

Neo4j勉強会

#数日前の話ではあるが・・・2/24に開催されたNeo4j 勉強会 - connpassに行ってきた。会場はアルコタワー17Fのオサレなカフェ風の会議室。 20人くらい来ていたかな?今回はグラフデータベースの基本的な話、Neo4jのデモなど。 今後、Neo4jのユーザ会を作ろう…

PG-Strom勉強会

昨晩、PG-Strom勉強会 (2/18) : ATNDに行ってきた。備忘のために #pgstrom ハッシュタグのTweetベースで簡単にメモを書いておく。きちんとまとまったレポにはなってないけど。 会場 恵比寿ネオナート5階。恵比寿駅から直近だけど、降りる場所を間違えたので…

PostgreSQL Unconference メモ

昨日開催されたPostgreSQLアンカンファレンス@東京(2/16) : ATNDのメモ セッション内容 セッション内容は当日、その場でしゃべりたい人が登録。 今回のセッション内容&タイムスケジュール セッションは全部で17本。開始早々にほとんど埋まる。 自分が話…

ゆるいテキスト検索

昨日のPostgreSQLアンカンファレンス@東京(2/16) : ATNDで「ゆるいテキスト検索」を発表しました。ゆるいテキスト検索(slideshare)

NTTでのグラフデータへの取り組み

NTT HOME > NTT持株会社ニュースリリース > 世界最速のグラフデータ分析処理技術を開発こんなこともやってたんだな。

textsearchに(無理やり)近似検索を組み込んでみた

以前、作成したntext型の近似マッチ関数をなんとかtextsearchに組み込めないか、いろいろ試してみたが、結局かなり強引な方法で実装してみることにした。 PostgreSQL本体にも手を入れているので、対応方式としてはちょっと微妙だが・・・ 今回はHOOKポイント…

pg_hint_planとPPASのHINT

pg_hint_planとPPAS(Postgres Plus Advanced Server)に実装されているHINT機能の関係をPPASのマニュアルちょっと調べてみたけど、別物っぽいですね。 てっきりPPASで実装しているHINT機能ををHOOKとして独立させたものなのかと思ってたから、ちょっと意外で…

pg_hint_plan

PostgreSQLにHINT句相当の機能を追加するHOOK、pg_hint_planをこっちでも使ってみた。pg_hint_planに関しては藤井さんのブログに分かりやすい使いかたが載っているので、手元の環境でさくっと試してみた。 (今週末のJPUG勉強会でも藤井さんが1セッション使っ…

textsearch+近似検索メモ

とりあえずメモ。いつ、実装にとりかかろうか・・・ この対処のためには textsearch_ja の改造では無理そう。 PostgreSQL本体へ手を入れなくてはならないか。 backend/utils/adt/tsvector_op.c の memcmp() 呼び出しを以前自作した近似検索演算子関数 or pg_…

EXTENSION機能の限界?

PostgreSQLの9.1から導入されたEXTENSIONの機構は、単にインストールスクリプトの隠蔽というだけでなく、パッケージに属する作成オブジェクト一覧の表示や、パッケージのバージョン管理もやってくれる便利な機構なんだけど、ちょっとだけ困ったことがある・…

textsearch_jaの正規化関数

textsearch_jaの正規化関数も結構頑張ってるなあ・・・ 半角カナ→全角カナ変換だけでなく、NFD(Normalization Form Decomposition)形式の濁点カナ(「ウ゛」など)から、NFC(Normalization Form Composition)形式の濁点カナ(「ヴ」など)への変換も対応している…

PostgreSQL 9.2へのtextsearch_jaインストール

忘れてたよ・・・9.2で以下の変更が入ってたんだっけ・・・ CREATE FUNCTIONで、手続き言語の名前を強制的に小文字に変換しないようにしました。 なので、textsearch_jaの現状のインストールスクリプトだと CREATE FUNCTION ts_ja_start(internal, int4) RET…

日本語正規化+pg_trgm

組み合わせ方法 とりあえず、pg_trgmと日本語正規化の組み合わせを検証してみた。 仕掛けはそんなに難しい話ではなく、日本語の正規化を行う関数(pg_ntext_normalize)をSQL関数として公開し、その関数を使って、pg_trgmインデクスを張る列を関数インデクスと…

pg_trgmのsimilarity関数

ntext型の近似検索用に自作で文字列間の類似度を評価する関数(pg_similar_rate)を作成していたけど、pg_trgm EXTENSIONにも似たような機能の関数(similarity)があるので比較してみた。 foo=# SELECT similarity('フィロストラトス' ,'ほげほげほげ'); simila…

鯖江市が行政データ「XML」形式で提供

http://www.chunichi.co.jp/article/fukui/20130115/CK2013011502000018.html 「行政データを自由に加工できる形で公開したのは、鯖江市が全国で初めてだ」ほう。 全国初というのはちょっと意外な気がした。まあ、折角なのでPostgreSQLのXML型のサンプルデー…

pg_trgmの類似度算出関数

pg_trgmの類似度算出関数 正規化テキスト型 ntext を全文検索系と連携させてみようと思い、pg_trgmを調べてみたらpg_trgmにも類似度算出を行うっぽい similarity関数があったのね・・・。 もしかすると、この関数をうまく使うとpg_trgm検索でもスコアっぽい…

ntext型実装つづき

機能拡張 正規化テキスト型ntext型の機能をちょっと拡張してみた。 半角カタカナ対応 近似検索 半角カタカナ対応 方式は別に難しくはないが、若干面倒な部分があったので実装するのは後回しにしていたが、今日ちょっと時間がとれたので実装してみた。 面倒な…

ntext型プロトタイプ

年末年始休暇の宿題だった、PostgreSQL用の日本語正規化テキスト型 ntext のプロトタイプができた。 とりあえずこんな感じで動作するところまではできた。 動作例 \dx コマンドでEXTENSION内容を表示。英語が正しいのかどうかは知らん。 ntext=# \dx ntext L…