雑文発散

«前の日記(2016-12-15) 最新 次の日記(2016-12-17)» 編集
過去の日記

2016-12-16 [長年日記]

[Crowi] Crowi を Elasticsearch 5.x で動かしたい #3

一昨日昨日の続き。

fields を何に使っているのかと思って、関連していそうなファイルを調べていたけど、どうもこれは使ってないのでは?と思いながら、もう一度 lib/utils/search.js を眺めていたらコメントが見つかった。

// getting path by default is almost for debug

なるほどデバッグ用途。でも、さらに良くみると、検索用クエリを作成する関数の引数には取得するフィールド名を指定できるような書き方になっている。ということは、コードの意図は「外部から指定したフィールド情報を得られるようにしたい」というものなのかも。

もしそうなら、クエリから fields の指定を取っ払ってしまうのは、ちょっとスジが悪いかも知れない。

ということで、Elasticsearch のバージョンにより、fieldssotored_fields かを使い分けるようなコードを書いてみている。今回以外でも、そのうちどこかでバージョンごとの差異を吸収するコードも必要になるだろうし。

elasticsearch.js には、info というメソッドがある。こいつがバージョン情報を含んだ JSON を返してくれる。

例えば Elasticsearch v2.4.2 だとこんな感じで返ってきた。

{
  "name": "Nimrod",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "7RkgJy0wR-m8zp4y8eLeeg",
  "version": {
    "number": "2.4.2",
    "build_hash": "161c65a337d4b422ac0c805f284565cf2014bb84",
    "build_timestamp": "2016-11-17T11:51:03Z",
    "build_snapshot": false,
    "lucene_version": "5.5.2"
  },
  "tagline": "You Know, for Search"
}

この version.number をパースしてバージョン比較をやればいいかな。