web-dev-qa-db-ja.com

オートコンプリート検索フィールドで検索のオートコンプリートを開始する必要があるのはいつですか?

現在取り組んでいるウェブサイトにオートコンプリート検索フィールドを実装しています。ただし、問題が発生します。

どの時点でオートコンプリートの結果の表示を開始しますか?

mockup

download bmml sourceBalsamiq Mockups で作成されたワイヤーフレーム

私たちが持っているいくつかのオプションがあります:

  1. ユーザーが入力を開始するとすぐに結果の表示を開始します(人々が誤って入力している場合は邪魔になる可能性があります。さらに、ここでサーバーヒットが発生する可能性があります)。
  2. 2文字が入力されるまで待ってください。そうすれば、人々がこのフィールドに意図的に入力していることをより確信できます(C#などの2桁のクエリに対してオートコンプリートの回答が返されないリスクがあります)。
  3. 結果を返す前にxミリ秒の遅延を追加します(そうであれば、理想的な遅延は何ですか?)

これを行う理想的な方法はありますか?結果をあまりにも早くフラッシュすると、(ホバーメニューなどと同様に)人々が不快になるのではないかと心配していますが、結果を十分に速く提示しないと、最初からオートコンプリートを使用する目的が損なわれます。

44
JonW

おそらく、ハイブリッドなアプローチが理にかなっています。私が考えているのは、遅延をすでに入力された文字数に関連付け、少ない文字の場合は遅延を長くすることです。

ユーザーが「K」だけを入力した場合、おそらくさらに多くの文字を入力することになるため、即座に提案するとより多くの結果が返され(ターゲットが上部に表示される可能性が低くなります)、ちらつきのリスクが高くなります(入力を続けるため) 、およびサーバーヒットを増やします(ユーザーが入力を続ける可能性が高いためです。入力がこれだけの場合は、一時停止し、すでに期待しているオートコンプリートが作動します。

彼らが「Kittens on Skat」と入力するまでには、上記のすべての逆が当てはまるため、ゼロからゼロまでの遅延がより適切です。

24
Ghillie Dhu

通常、先行入力/オートコンプリートはinstantであり、混乱を避けるために、単一の文字の直後にオートコンプリートの標準を使用することをお勧めします。

慣例以外には理由はありませんが、1文字を瞬時にオートコンプリートすることをお勧めします。 Google.com、Google Chrome、iTunes、Visual Studio、SQL Server Management Studio、AndroidでのGoogle検索など、私が手の届く範囲にあるすべての検索バーがこのように動作します。Microsoftの場合はAppleそしてGoogleはすべて何かに同意しますが、それらにはしばしば理由があります。慣習に盲目的に従う必要があるわけではありませんが、 慣例は快適で摩擦が少ない なので、一般的にそれらを破り始めるには正当な理由が必要です。

遅延を追加すると、リスクがあるかどうか、ユーザーが機能しているかどうかが疑問になります。それは本当に自動補完フィールドですか?以前はオートコンプリートされていましたが、なぜ今ではありませんか?.

オートコンプリートがどのように(そしてどれほど適切に)機能するかに応じて、ユーザーは実際に結果がすぐに表示されるか、1文字後に表示されると期待するかもしれません。 Chromeで数ヶ月の作業の後、 "t"(Twitter) "g"(gmail)またはu(ux.stackexchange)を入力すると、どのWebサイトが表示されるかがわかりました。オートコンプリートの結果が自動的に挿入されない限り、つまり手動でクリアする必要がある限り、少しやりすぎても危険はほとんどありません。

ただし、Googleインスタント検索のようなオートコンプリート以上のものがある場合は、通常の検索中に画面の広い領域を繰り返しスワップアウト(または低速/データを集中的に使用する操作)を繰り返さないように、少し遅延を挿入できます。 Googleインスタント検索は、「インスタント」結果を表示する前に数百ミリ秒待機します。Google検索履歴は、入力を3秒間停止したイベントのみを記録します。ほとんどの場合、3秒はあまりにも保守的ですが、「重要な」イベント(オートコンプリート、結果の表示、履歴として記録)のそれぞれにかなり長い時間がかかることに注意してください。オートコンプリートはそれほど煩わしくなく、欠点もほとんどないため、すぐに表示されます。結果を表示するには、画面の更新とネットワークトラフィックを増やす必要があるため、少し遅くなります。履歴のロギングはより「永続的」であるため、混乱を招く/誤解を招く結果を回避するために、タイマーはかなり保守的です。

30
Ben Brocka

文字数制限を設定することをお勧めします。

あなたの場合、適切な文字数を決定する必要があります。オートコンプリート機能では、リストを選択可能な結果の数に制限する必要があります。たとえば、ユーザーに100要素のリストが表示された場合、それはまったく使用できません。

たとえば、「a」から始まる400のアイテムがある場合、ユーザーは-文字通り-スラッシュする必要があるため、400アイテムのリスト全体を表示しても意味がありません。 2番目の文字で約20に制限されている場合は、この制限の使用を検討できます。

もちろん、文字ごとに調整することはお勧めできません。ただし、ある文字から始まるオプションの数が別の文字から始まるオプションとはまったく異なる場合は除きますが、これらの状況はまれだと思います(たとえば、成分リストがある場合、成分名とE-123記号の両方)。表示するオプションの合理的な数は最大10、おそらく15になると思います。

もちろん、別のアプローチを使用して、リストに表示される項目の統計情報を使用することができます。これにより、誰かが「a」と入力すると、「a」から始まる一部の項目のみが表示されます(これは、たとえばGoogleで使用されます-アルゴリズムはより複雑ですが、一般的には次のようになります。入力する文字が増えると、さまざまな提案が表示されます)。ただし、この方法は、(その性質から)非常に無秩序な多数のデータを検索するために使用でき、それを編成する意味がありません。ユーザーがexpect整理されるデータを使用する場合は常に、統計的アプローチにより混乱が生じる可能性があります(たとえば、ユーザーは「Smits」が「Smith」と一緒に表示され、統計アルゴリズムにより表示が許可されないことを期待する場合があります)。 。

4
Dominik Oslizlo

ベンブロッカが言ったように、私も一瞬言います。これに付け加えると、Visual Studioまたは同様の製品でIntellisenseを使用したことがある場合は、入力した最初の文字に基づいて、それが瞬時でもあることに気付くでしょう。ユーザーとして、私は最初に入力した文字に基づいて何が利用可能かを知りたいので、これは非常に役立ちます。偶然、探しているものに「単語を付ける」方法がわからない場合は、最初の文字ですぐに検索すると、単語を作成するのに役立ちます。

2
Isaiah Nelson

すべての設計の質問と同様に、コンテキストとドメインによって異なります

オートコンプリートボックスを使用すると、計画しているタスクへの「短絡」をユーザーに示すことで、ユーザーを(良い方法で)気を散らすことができます。これを正しく行うと、ユーザーは必要な要素を見つけて、すぐに送信を完了します。それが間違っている場合は、ユーザーにテキストボックスと検索の一致を確認しながら、何かが発生するまでタスクを再開させます。これは、オートコンプリートをまったく使用しない場合よりも優れていますが、最適ではありません。

問題は、「ユーザーが何を意味するのか、いつ推測できるか」です。それはドメインに依存します-どの時点で確実に推測を始めることができますか?特定のドメインでは、特定の用語が不規則な規則性をもって表示される場合があるため、ユーザーがこれらの用語の最初の文字を入力したときに、それらが一致する可能性が高いと確信できます。同様に、ユーザーが既に検索の履歴を持っている場合は、ユーザーが検索を再度実行しようとしていることをかなり確信で​​きます(検索を繰り返す価値があると仮定します。これはコンテキストによって異なります)。

とはいえ、適切ではない提案が出された場合でも、オートコンプリートがすぐに表示されるユーザーテストを確認しており、これによる大きな影響は見られません。これは他のすべてが等しい、より高速であるという点でエラーであることを示唆しています。

2

他の人が言ったことに加えて、このコンテキストでしばしば煩わしいUIの動作について説明します。時々、人がタイプすると、オートコンプリートはほとんどすべてのタイプされた文字に対して変化し続けます。この方法で再フラッシュすると、ちらつきのようなものが追加され、ユーザーが非常に煩わしいと報告しているのを見てきました。

適切な解決策が何かはわかりませんが、覚えておくべきことはあります。おそらく、更新頻度の制限はありますか?

2
curious_cat

アプローチを完了する前に、私が非常に重要だと考えるもの。アプリケーションの(最大の)エンドユーザーグループは誰ですか?

オートコンプリートを「時間」だけ遅らせるのは愚かです。用語を入力した後、入力が非常に速く、入力が遅いと思うWebサイトが嫌で、ポップアップオートコンプリートが表示されます。繰り返しになりますが、私はこれらの特定の旅行サイトが大好きです。検索ボックスにBと入力するとすぐにバーミンガムがポップアップ表示されます。

留意すべきもう1つのことは、ネットワーク遅延です。あなたは極端に遅いインターネット速度でエンドユーザーに対処するつもりですか?このアプリが接続が非常に遅い場所用である場合、私はこれを完全に回避します。

私は自動車のアセンブラー用のWebアプリを作成しましたが、コンポーネントには多くのシールが使用されていました。データ入力演算子は非常に効率的だったので、フィールドに入力された実際の「単語」を見つけるアルゴリズム(Javaでは非常に簡単)を作成し、Ex SealABC SealXYZなどをオートコンプリートしました。そのため、IMOは理想的な方法です。 YMMV。

2
happybuddha