dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

Elasticsearch で nested フィールドを検索

2024-02-24 21:21:58 | elasticsearch
Elasticsearch で nested フィールドに対する検索のメモ。
■インデックス
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "id": {"type": "keyword", "store": "true"},
      "tags": {
        "type": "nested",
        "properties": {
          "tag": {"type": "keyword", "store": "true"}
        }
      },
      "status": {"type": "integer", "store": "true"}
      }
    }
  }
}

■bulk でデータ登録
{"index": {"_id": "doc_1"}}
{"id": "doc_1", "tags": [{"tag": "abc"}, {"tag": "def"}], "status": 1}

{"index": {"_id": "doc_2"}}
{"id": "doc_1", "tags": [{"tag": "def"}, {"tag": "ghi"}], "status": 1}

{"index": {"_id": "doc_3"}}
{"id": "doc_1", "tags": [{"tag": "ghi"}, {"tag": "jkl"}], "status": 1}

■検索クエリ
{
  "query": {
    "bool": {
      "must": [
        {"term": {"status": 1}},
        {"nested": {
            "path": "tags",
          "query": {"term": {"tags.tag": "def"}}
        }}
      ]
    }
  }
}

■検索結果
{
  ...,
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.0296195,
    "hits" : [
      {
        "_index" : "test_nested_01",
        "_id" : "doc_1",
        "_score" : 2.0296195,
        "_source" : {
          "id" : "doc_1",
          "tags" : [
            {
              "tag" : "abc"
            },
            {
              "tag" : "def"
            }
          ],
          "status" : 1
        }
      },
      {
        "_index" : "test_nested_01",
        "_id" : "doc_2",
        "_score" : 2.0296195,
        "_source" : {
          "id" : "doc_1",
          "tags" : [
            {
              "tag" : "def"
            },
            {
              "tag" : "ghi"
            }
          ],
          "status" : 1
        }
      }
    ]
  }
}


python で画像をリサイズ

2024-02-24 13:36:44 | python
python で画像をリサイズする方法のメモ。
import sys
from PIL import Image

def main():
    in_file = sys.argv[1]
    out_file = sys.argv[2]
    rate = float(sys.argv[3])

    img = Image.open(in_file)
    out_width = int(img.width * rate)
    out_height = int(img.height * rate)

    out_img = img.resize((out_width, out_height))
    out_img.save(out_file)

    return 0

exit(main())


python で svg を png に変換

2024-02-24 13:21:43 | SVG
python で svg ファイルを png ファイルに変換する方法のメモ。

■ライブラリなどのインストール
pip install svglib
pip install reportlab

sudo yum install cairo cairo-devel
pip install rlpycairo

■プログラム
import sys
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM

def main():
    in_file = sys.argv[1]
    out_file = sys.argv[2]

    img = svg2rlg(in_file)
    renderPM.drawToFile(img, out_file, fmt='png')

    return 0

exit(main())