ユーザーがsolrインデックスで非常に一般的なキーワードを検索した場合に、有用なレコードを返すことができるようにしたいと思います。たとえばeducation
。
この場合、レコードの99%近くにその単語が含まれます。そのため、この単語などの検索には時間がかかります。
これはColdFusionのsolr用ですが、私はsolrだけに分離されたソリューションを受け入れています。
今、私はストップワードのリストを考え出し、それらの検索が完全に行われないようにすることを考えています。
ユーザーがsolrインデックスで非常に一般的なキーワードを検索した場合に、有用なレコードを返すことができるようにしたいと思います。たとえばeducation
。
この場合、レコードの99%近くにその単語が含まれます。そのため、この単語などの検索には時間がかかります。
これはColdFusionのsolr用ですが、私はsolrだけに分離されたソリューションを受け入れています。
今、私はストップワードのリストを考え出し、それらの検索が完全に行われないようにすることを考えています。
検索に時間がかかる場合は、返される結果の数を制限していないことが原因である可能性があります。<cfsearch>
タグには、データを制限またはページ分割するために使用できる属性と属性がありますmaxrows
。startrow
または、次の呼び出しを介してSolrのWebサービスを直接呼び出すこともできます<cfhttp>
。
<cfhttp url="http://localhost:8983/solr/<collection_name>/select/?q=<searchterm>&fl=*,score&rows=100&wt=json" />
Solrはデフォルトで10行を返します。rows
これはパラメータで変更できます。このパラメーターを使用することもできますstart
(Solrは1ではなく0からカウントを開始することに注意してください)。このソリューションは、特にCF 9を使用している場合、スコア以外のフィールドで並べ替えるときにページ付けできるため、より柔軟であると思います。
詳細については、 http ://www.thefaberfamily.org/search-smith/coldfusion-solr-tutorial/を参照してください。
ユーザーが非常に一般的な用語を1つだけ検索する場合は、結果を制限し、一致するものが多すぎることをユーザーに通知する必要があります。
より一般的なケースでは、2パス(少なくとも)アプローチを実行する必要があります。検索用語を取得し、ルックアップを実行してそれらの「共通性」を判断します。最初に最小公倍数に基づいてフィルタリングし、最後に最小公倍数に基づいてフィルタリングする必要があります。
たとえば、ユーザーはを検索しますserendipitous education
。serendipitous
に11の一致があり、に900000の一致があることを識別しますeducation
。したがって、serendipitous
最初にフィルターを適用すると、11回の一致が得られます。次に、education
フィルターを適用すると、7つの一致が得られます。
高速検索の鍵は、インデックス作成と事前計算された統計です。このような統計が手元にある場合は、最適化されたアプローチを動的に作成できます。