雑文発散

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

2016-12-15 [長年日記]

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

昨日からの続き。昨日の修正内容が Elasticseach 2.x でもそのまま動くのか?という検証をしてみた。

Docker で Elasticsearch 2.4.2 のコンテナを立ち上げて、試してみた。 curl localhost:9201 で見える情報はこんな感じ。

{
  "name" : "Dreadknight",
  "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"
}

kuromoji も入れている。

% curl localhost:9201/_cat/plugins
Dreadknight analysis-kuromoji 2.4.2 j

動作検証するべきパターンはこんな感じだと思って、検証し始めたところ、2 番でまずコケた。

# 結果 ESバージョン 状態 検証動作
1 2.4.2 新規 インデックス作成ができるか?
2 × 2.4.2 新規 検索ができるか?
3 2.4.2 既存データあり (インデックス再構築前に)検索ができるか?
4 2.4.2 既存データあり インデックス作成ができるか?
5 2.4.2 既存データあり 検索ができるか?
6 5.1.1 新規 インデックス作成ができるか?
7 5.1.1 新規 検索ができるか?
8 -- 5.1.1 既存データあり このパターンは対象外

出力されていたエラーメッセージには、"unknown search element [stored_fields]" と出ていた。

{
  "type": "search_parse_exception",
  "reason": "failed to parse search source. unknown search element [stored_fields]",
  "line": 1,
  "col": 18
}

stored_fields は昨日 fields から書き換えたところなので、もう早速この修正だと Elasticsearch 2.4 では NG だということが分かった。ここでパッと思いつく対応としては「Elasticsearch のバージョンにより投げるクエリを変更する」というもの。でも、そういう処理は今のところ TODO 状態だ(笑)

SearchClient.prototype.checkESVersion = function() {
  // TODO
};

そこで、ちょっと思いついた。そもそも、この stored_fields もしくは fields は一体何を実現するためのクエリなのか?と。そこを理解していなかった。

fields を指定した場合のレスポンス例。

{
  "took": 13,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.03262724,
    "hits": [
      {
        "_index": "crowi",
        "_type": "pages",
        "_id": "58507dcc0509e44224a4373c",
        "_score": 0.03262724,
        "fields": {
          "path": [
            "/user/suzuki/メモ/2016/12/14/日本語入り"
          ]
        }
      }
    ]
  }
}

fields を外した場合のレスポンス例。

{
  "took": 53,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.03262724,
    "hits": [
      {
        "_index": "crowi",
        "_type": "pages",
        "_id": "58507dcc0509e44224a4373c",
        "_score": 0.03262724,
        "_source": {
          "path": "/user/suzuki/メモ/2016/12/14/日本語入り",
          "body": "# 日本語入り


吾輩わがはいは猫である。名前はまだ無い。

どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪どうあくな種族であったそうだ。この書生というのは時々我々を捕つかまえて煮にて食うという話である。

しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌てのひらに載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始みはじめであろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶やかんだ。


その後ご猫にもだいぶ逢あったがこんな片輪かたわには一度も出会でくわした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙けむりを吹く。どうも咽むせぽくて実に弱った。これが人間の飲む煙草たばこというものである事はようやくこの頃知った。",
          "username": "suzuki",
          "comment_count": 0,
          "bookmark_count": 0,
          "like_count": 0,
          "created_at": "2016-12-13T23:01:32.770Z",
          "updated_at": "2016-12-13T23:01:32.982Z"
        }
      }
    ]
  }
}

fields 指定がないと、_source の内容が丸ごと返ってきている。丸ごと返ってくるのは無駄な場合もあるので、その抑制のために fields 指定をしているのかな。SQL で SELECT * FROM ... の代わりに SELECT id, name FROM ... みたいにするように。

もし、「丸ごとデータの抑制」のための fields 指定だったら、 "_source": "path" のようにして、必要な _source だけに絞り込むこともできる。

{
  "took": 14,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.03262724,
    "hits": [
      {
        "_index": "crowi",
        "_type": "pages",
        "_id": "58507dcc0509e44224a4373c",
        "_score": 0.03262724,
        "_source": {
          "path": "/user/suzuki/メモ/2016/12/14/日本語入り"
        }
      }
    ]
  }
}

fields を指定していた場合は、 hits.fields という項目が返ってきている。これを検索結果として利用しているかどうかで、上記の _source による抑制に切り替えても良さそうな気はする。

ここはもうちょっとコードを追わないと分からないなぁ。ということで、続く。

本日のツッコミ(全8件) [ツッコミを入れる]
Danielsoire (2026-06-19 00:10)

Мы работаем круглосуточно, принимаем заявки по телефону, оказываем помощь анонимно и конфиденциально. Вы можете позвонить сейчас, оставить заявку через форму сайта или заказать обратный звонок. Бесплатная первичная консультация помогает понять, какой метод подойдет в конкретной ситуации: капельница, детоксикация, вывод из запоя, снятие ломки, кодирование, амбулаторное лечение, стационар или реабилитация. <br>Детальнее - http://narkolog-na-dom-kazan21.ru

Scottpoigh (2026-07-15 05:09)

Клиника располагает собственным стационаром, отвечающим строгим медицинским стандартам. Круглосуточное наблюдение дежурных врачей и среднего медицинского персонала позволяет безопасно купировать острые состояния, такие как алкогольный психоз, тяжёлая интоксикация, судорожные припадки и абстинентный синдром. В нашем центре созданы все условия для эффективного лечения алкоголизма и наркомании, а подробнее о каждой программе вы можете узнать по телефону. В распоряжении центра — необходимое диагностическое оборудование, собственная лаборатория и комфортный палатный фонд с возможностью выбора палаты эконом, стандарт или VIP. Лечение проходит в условиях полной конфиденциальности: данные пациента не передаются в государственные наркологические диспансеры. Мы гарантируем анонимное лечение и анонимную помощь всем, кто к нам обращается. <br>Узнать больше - http://narkologicheskaya-klinika-moskva13.ru/

Terrygrada (2026-07-19 03:45)

основанием для вызова специалиста является неспособность человека самостоятельно выйти из состояния непрерывного употребления алкоголя и наличие признаков абстиненции. <br>Выяснить больше - http://vyvod-is-zapoya-sochi20.ru

Richardbooro (2026-07-22 14:19)

Заявку можно оставить в любое время, специалист быстро сориентирует по дальнейшим действиям. <br>Получить дополнительную информацию - http://vyvod-iz-zapoya-v-gelendzhike3.ru/

Denniswaift (2026-07-30 02:12)

Продолжительное употребление алкоголя вызывает опасные последствия для здоровья из-за сильной алкогольной интоксикации, а также наносит вред многим другим факторам, влияющим на качество жизни. Запой разрушает работу внутренних органов, приводит к обезвоживанию, нарушению солевого баланса, повышению давления, сбоям сердечно-сосудистой системы, обострению хронических заболеваний, депрессии, страху, бессоннице и неадекватному поведению. Чем дольше больной продолжает пить, тем больше токсинов накапливается в крови, тем тяжелее проходит процесс выхода из запойного состояния и тем выше вероятность инфаркта, инсульта, психоза, делирия, судорожных припадков и других тяжелых последствий. <br>Подробнее можно узнать тут - http://vyvod-iz-zapoya-v-novorossijske3.ru

DavidViole (2026-08-08 01:46)

Вывод из запоя в Люберцах требуется, когда человек несколько дней находится в запойном состоянии, принимает алкоголь, не может самостоятельно остановиться, плохо спит, испытывает тремор, тревогу, тошноту, слабость, скачки давления или признаки отравления. В таких случаях важно не ждать, что организм полностью справится сам, а обратиться за медицинской помощью: врач оценивает состояние пациента, длительность запоя, количество спиртного, наличие хронических заболеваний и подбирает безопасное лечение. <br>Получить дополнительную информацию - https://vyvod-iz-zapoya-v-lyubercah14-1.ru

Henrynex (2026-08-11 07:47)

В этом обзоре представлены различные методы избавления от зависимости, включая терапевтические и психологические подходы. Мы сравниваем их эффективность и предоставляем рекомендации для тех, кто хочет вернуться к трезвой жизни. Читатели смогут найти информацию о реабилитационных центрах и поддерживающих группах. <br>Все материалы собраны здесь - https://narcology-clinic.ru/vyivod-iz-zapoya/v-staczionare

Donaldpault (2026-08-11 08:50)

Когда в семью приходит беда, связанная с неконтролируемым приёмом спиртного или психоактивных веществ, счёт идёт буквально на секунды. Поиск выездной бригады в интернете часто приводит на сайты с общими фразами, однако мы предлагаем конкретное решение — нарколог на дом в Люберцах и по всей Московской области. Наша частная наркологическая служба позволяет быстро и на высоком профессиональном уровне прервать запой, снять мучительные проявления абстиненции и избежать тяжёлых последствий для здоровья. Выезд врача доступен в любое время суток: оперативный вызов нарколога в любое время и день недели, врач выезжает по указанному адресу сразу после оформления заявки. Специалисты центра регулярно работают по всему району, включая соседние города – Королёв, Балашиху, Мытищи, Химки, Щёлково, Подольск, Домодедово, Раменское, Красногорск, Долгопрудный, Лобню, Звенигород, Одинцово, Солнечногорск и другие. Благодаря этому квалифицированная медицинская помощь становится рядом с вами уже через 30-40 минут после обращения. Мы не просто снимаем острые проявления заболевания – мы выполняем полный комплекс мероприятий, от первичной диагностики до мотивационной беседы и последующего кодирования прямо в домашних условиях. <br>Подробнее тут - http://narkolog-na-dom-v-lyubercah14.ru/