You are currently viewing OpenSearchでなにか作るぞ!(その6 アイコンデータを検索出来るようにサーバーサイドを修正する)

OpenSearchでなにか作るぞ!(その6 アイコンデータを検索出来るようにサーバーサイドを修正する)

前回まででOpenSearchのインデックスにアイコンデータを組み込むところまで作成しました。
今回は追加したアイコンデータを検索できるように、Goで作成しているサーバーサイドの更新を行います。

クエリの形式を変更する

今まではQueryDSLを利用してクエリを構築していましたが、これをプログラムで作成しようとするとなかなか苦労しそうで、いい方法が思いつきませんでした。

ということで、今回から「Query String」という形式を利用してクエリを発行することにしました。
https://opensearch.org/docs/latest/query-dsl/full-text/query-string/

この形式であればJSONの複雑な構造ではなく、シンプルな文字列でクエリを表現できそうだったため、この形式を利用することにしました。

クエリ生成部分の修正

	queryMainStr := `{
		"size": 20,
		"query": {
			"query_string": {
				"query": "%s"
			}
		}
	}`

query_stringを利用し、%sの部分をクエリストリングに置き換える。
QueryDSLよりもシンプルにすることが出来ました。

	queryStr := ""
	if searchRequest.Keyword != "" {
		queryStr += "work_title:" + searchRequest.Keyword
	}
	if searchRequest.AgeLimitType != "" {
		if queryStr != "" {
			queryStr += " AND "
		}
		queryStr += "work_icons:" + searchRequest.AgeLimitType
	}

クエリ文字列を作成する部分です。
条件が2つしか存在しないので力技でANDをつけたりして組み立てています。
条件が今後増えてくれば、もう少しクエリ組み立て部分は考える必要が出てきそうですね。

組み立てたクエリは「fmt.Sprintf(クエリ文字列, クエリ式)」を利用して%sの部分を置き換えています。

POSTMANから実行してみる

POSTMANから実行してみます。
今回はクエリパラメータに条件を設定し、GETパラメータでサーバーに渡します。

実行した結果はこちらになります。

query_stringを利用して検索結果を取得することが出来ました。

以上です

今回はサーバーサイドの改修を行いました。
次回はフロントエンドの開発に入ろうかと思います。

コメントを残す