NodeJSでOpenSearch®を使い始める

<font color="Grey">*[Start using OpenSearch® with NodeJS](https://aiven.io/blog/start-using-opensearch-with-nodejs)の翻訳です。*</font>

優れた検索と集計機能は、アプリケーションに大きな違いをもたらします。NodeJSでOpenSearch®を使用する方法については、こちらをお読みください。

# NodeJSでOpenSearch®を使い始める

検索デベロッパーセンター

OpenSearchは、あなたのアプリケーションに完全にオープンソースの検索エンジンを追加するためのもので、そのNodeJSクライアントは、それを使い始めるための簡単な方法です。  

この2つを試してみよう！


そして、グルメな料理と調理法が満載のデータセットほど良い例があるだろうか？Epicuriousの2万種類以上のレシピのデータセットを使って、データを検索・集計します。最も意外な食べ物の組み合わせを探したり、最も頻度の低いものを見つけたり、日付ヒストグラムを作成したり、移動平均を計算したり、他にもいろいろなことをします。きっとお腹が空くだけでなく、インスピレーションも得られるはずだ！


OpenSearchクラスタを作成する基本から始まり、検索や集計のクエリを書く前に、プレイグラウンドをセットアップするプロセスを順を追って説明します。


#### ワークショップOpenSearch と NodeJS で検索と集計を簡単にする

このチュートリアルに沿ったオンラインワークショップに参加しましょう。OpenSearchの仕組みを学び、データを検索、集計、視覚化するための実践的な知識を身につけましょう。

[詳細と登録](https://aiven.io/workshop/opensearch-with-javascript)
## いろいろな検索クエリを試してみよう


OpenSearchの中核には、3つの主要なリクエストグループ、すなわち、用語レベル、フルテキスト、ブーリアンに対して柔軟な検索クエリを作成する機能があります。タームレベルクエリは、追加分析なしで完全に一致するものを見つけたいときに便利です。フルテキストクエリは、分析されたテキストフィールドのマッチをよりスマートに検索し、関連性でソートされた結果を返すことができます。そして最後に、ブーリアン・クエリは複数のクエリを組み合わせるときに便利です。


例えば、トマト、ニンニク、ディルが入ったスープを探したい場合、`match`関数が便利である：



```
 `/\*\*
 \* 関連度でソートされたマッチを見つける。
 \* run-func search match title 'Tomato-garlic soup with dill'.
 \*/
 module.exports.match = (field, query) => { { 検索結果を表示する。
 console.log(`Searching for ${query} in the field ${field}`)；
 const body = {
 query：{
 match：{
 [field]：{
 クエリー
 },
 },
 },
 };
 client.search(
 {
 index: indexName、
 body、
 },
 ログタイトル
 );
 };`クリップボードにコピー
```

また、ユーザがうっかりやってしまうスペルミスを考慮したい場合は、`fuzziness`プロパティが便利です：



```
`/\*\*
 \* タイプミスやスペルミスを考慮するためにあいまいさを指定する。
 \* run-func search fuzzy title pinapple 2
 \*/
module.exports.fuzzy = (field, value, fuzziness) => { { { { (field, value, fuzziness) => { { (field, value, fuzziness) => {
 console.log(
 ファジィ度を${fuzziness}に設定して${field}内の${value}を検索します。
 );
 constクエリ = {
 クエリ：{
 ファジィ: {
 [フィールド]：{
 値、
 ファジー度、
 },
 },
 },
 };
 client.search(
 {
 index: indexName、
 body: query、
 },
 ログタイトル
 );
};` クリップボードにコピー
```

もし私たちが興味をそそったなら、マッチする値、範囲、あいまいなフレーズ、句の組み合わせなどの検索クエリの他の例を、私たちの記事[OpenSearchとNodeJSを使った検索クエリの書き方](https://docs.aiven.io/docs/products/opensearch/howto/opensearch-and-nodejs)で見つけてください。


## データを集約する方法を学ぶ


検索クエリに慣れているなら、次の冒険に乗り出す準備はできている。特に、メトリック、バケット、パイプラインの3つの異なる集約タイプについて見ていきます。


メトリック集計は、最小値や最大値を求めたり、平均値を計算したり、フィールド値に関する統計情報を収集したりするような計算に役立ちます。例えば、パーセンタイルの範囲を計算するためにメトリック集約を使用する方法です：



```
`/\*\*
 \* フィールドのメトリック集約を取得する。
 \* 例：avg, min, max, stats, extended_stats, percentiles, terms
 \* 例：avg, min, max, stats, extended_stats, percentiles, terms
 \*/
モジュール.exports.metric = (metric, field) => { { { (metric, field) => { { (metric, field) => {
 const body = {
 aggs: {
 [aggs-for-${field}`]：{// 集計名。
 [metric]：{// サポートされている集約タイプの1つ
 フィールドを指定します、
 },
 },
 },
 };
 client.search(
 {
 index、
 body、
 size: 0, // `ヒット`を無視する。
 },
 logAggs.bind(this, `aggs-for-${field}`) // 集計出力をログに記録するコールバック。
 );
};`クリップボードにコピー
```

レシピのカロリーレベルがどのように変化するかわかるだろうか？記事に従って、`run-func aggregate metric percentiles calories`を実行して見てください。ネタバレ注意 - **チョコレートプラムケーキ**は最もカロリーの高い料理の一つです（そしておそらく最も美味しい料理の一つでもあります！）。


メトリック集計は素晴らしいものですが、バケット集計という別のタイプの集計もあります。バケツ集約は、指定された基準に基づいてドキュメントをバケツの集合に分散させます。バケツ集計は様々なことに使えます。例えば、最も使用頻度の低いカテゴリーなど、データセットの中で最もレアなアイテムを見つけるために使うことができます：



```
`/\*\*
 \* レシピをバケツにグループ分けして、最もレアなアイテムを見つける
 \* Ъ `run-funcate aggregate rareTerms categories.keyword 3`.
 \*/
module.exports.rareTerms = (field, max) => { { { { { { { { (field, max) => { { { (field, max) => {
 const body = {
 aggs: {
 aggs:[`rare-terms-aggs-for-${field}`]：{
 rare_terms：{
 field、
 max_doc_count: max, // 最大アイテム数以下のバケットを取得する
 },
 },
 },
 };
 client.search(
 {
 index、
 body、
 size: 0、
 },
 logAggs.bind(this, `rare-terms-aggs-for-${field}`)。
 );
};`クリップボードにコピー
```

このクエリーを実行すると、予想外の結果が表示される！


そして最後に、パイプライン集計はいくつかの集計を組み合わせてより複雑なフローを構築し、移動平均や累積和のようなものを計算し、ドキュメントのデータに対して他の様々な数学的計算を実行します。特に、数年を通して追加されたレシピ数の移動平均を計算する方法を見ていきます。


これらの例や他の多くの例は、[OpenSearchとNodeJSで集計を使う](https://docs.aiven.io/docs/products/opensearch/howto/opensearch-aggregations-and-nodejs)の記事で見ることができます。


## 例とその他のリソース


* [GitHubのリポジトリ](https://github.com/Aiven-Labs/demo-open-search-node-js)で、私たちの記事で言及されている検索や集計クエリの例を見つけてください。
* チュートリアルの[データクエリの方法を学ぶ](https://docs.aiven.io/docs/products/opensearch/howto/opensearch-and-nodejs)に進む。
* [集計リクエストの書き方](https://docs.aiven.io/docs/products/opensearch/howto/opensearch-aggregations-and-nodejs)のチュートリアルへ進む。
* [半構造化レシピデータの検索を実行するために OpenSearch® を使用する方法を学ぶ](https://aiven.io/developer/opensearch-dinner-party) の記事をチェックしてください。
* [Aiven for OpenSearch](https://docs.aiven.io/docs/products/opensearch)の他のドキュメントリソースをチェックしてください。


最後に、[Aiven for OpenSearch](https://aiven.io/opensearch)を使い始めるために[無料トライアルにサインアップ](https://console.aiven.io/signup)し、製品や機能関連の最新情報を得るために[Twitter](https://twitter.com/aiven_io)をフォローしてください。