検索を正しく行うのは難しい場合があります。 リアルタイムの結果をクライアントに配信したいのですが、そのためには、トリッキーなサーバー設定と大量のデータベースアクセス、または検索専用のサーバーが必要です。または、検索に使用するすべてのものを検索前にクライアントにアップロードします…または、 AlgoliaInstantSearchを使用することもできます。 (いいえ、これは何でもありません。)これは、インデックスを作成するデータをサーバーにプッシュできるホスト型ソリューションです。 そこから、非常にシンプルなコンポーネントを使用して、Vue.jsアプリにリアルタイム検索を追加できます。

見てみましょう。

入門

vue-cliwebpack-simpleテンプレートを使用して単純なVueプロジェクトを開始します。

次に、vue-instantsearchをインストールします。

# Yarn
$ yarn add vue-instantsearch
# NPM
$ npm install vue-instantsearch --save

設定

次に、main.jsでプラグインを有効にします。 とてもシンプルです。

main.js
import Vue from 'vue';
import App from './App.vue';
import InstantSearch from 'vue-instantsearch';

Vue.use(InstantSearch);

new Vue({
  template: '<router-view></router-view>'
})
.$mount('#app');

App.vueに、アルゴリアの最も基本的な設定を使用して検索するセクションを追加しましょう。

vue-instantsearchは、子供たちにデータと機能を提供する仮想コンポーネントで「実際の」レンダリング可能なコンポーネントをラップする、reactスタイルのラッパーコンポーネントを使用します。

最初に必要なのはais-indexです。 これにより、AlgoliaInstantSearchが結果を見つけるために必要な接続情報が提供されます。 アカウントを設定してインデックスを作成している場合は、Algoliaダッシュボードでapp-idapi-keyindex-nameを見つけることができます。 今のところ、提供されたデモ資格情報を使用します。

次のコンポーネントはais-search-boxです。 それは(驚きの)検索ボックスをレンダリングします。 (さらに、ちょっとした検索とクリアボタン。)

続いて、ais-resultsコンポーネントがあります。 これは少し面白いです。 スコープスロットを使用して、レンダリングする独自の検索結果テンプレートを提供できるようにします。 つまり、検索結果に画像のURLがある場合は、imgタグを挿入して、srcプロパティを設定し、画像を使用して検索結果をブームすることができます。

ここでの最後のコンポーネントはais-highlightです。 結果オブジェクトの特定のプロパティ(attribute-nameで指定)の一致した部分を<em></em>タグでラップします。 (カスタマイズ可能です。)つまり、Somethingを検索し、結果オブジェクトが次のようになっている場合、

{
  "name": "The Book of Something"
}

結果の出力は次のようになります:<p>The book of <em>something</em><p>。 ハイライトは手動で実装するのにイライラする機能なので、すぐにサポートできるのは素晴らしいことです。

App.vue
<template>
  <div id="app">
    <img src="./assets/logo.png">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    <ul>
      <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
      <li><a href="https://chat.vuejs.org" target="_blank">Community Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
    </ul>
    <h2>Ecosystem</h2>
    <ul>
      <li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
      <li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
      <li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
    </ul>

    <h2>Search For Stuff</h2>
    <ais-index
      app-id="latency"
      api-key="3d9875e51fbd20c7754e65422f7ce5e1"
      index-name="bestbuy"
    >
      <ais-search-box></ais-search-box>
      <ais-results>
        <template slot-scope="{ result }">
          <p>
            <ais-highlight :result="result" attribute-name="name"></ais-highlight>
          </p>
        </template>
      </ais-results>
    </ais-index>
  </div>
</template>
...

あなたがそれをしたら、あなたは終了するはずです! 開発サーバーを起動し、検索ボックスに何かを入力すると、結果がほぼ瞬時にレンダリングされるのを確認できます。

あとは、APIキーを自分の所有するものに切り替えるだけです。他の利用可能なコンポーネントのいくつかを試してみてくださいスタイルを設定してくださいカスタムコンポーネントを作成してください、楽しんでね!