私は自分のプロジェクトのためにJavaScriptでクライアント側の検索システムに取り組んでいますが、検索機能が期待どおりに動作するように検索機能を動作させるのに特に問題があります。
現在、配列でソートされ、q
ループでループされた検索用語for
(q[i]
現在処理されている用語も同様)は、それらが含まれている単語を選択し、相互に影響を与えません。
これらは2つの問題を引き起こします。
最初の問題では、ご想像のとおり、 introを検索すると紹介記事が返されますが、同様にconを検索すると、 Conditionsに関する記事が返されます。これは、あまり役に立たない機能です。
2番目の、より深刻な問題は、検索用語が相互に影響を及ぼさないことです。したがって、を検索すると
introduction is important for comedians to setup their jokes
、「はじめに」と「セットアップ」の記事がクエリに含まれるため、これらの記事が返されます。
各検索ワード(各記事をループするループ内にある)をループし、結果に優先順位を付けるコードスニペットは次のとおりです。
rq = new RegExp(q[i], 'gim');
eq = new RegExp("\\b" + escape(q[i]) + "\\b", 'gi');
if (rq.test(title) || rq.test(keywords)) {
match = true;
if (title.match(rq) != null) {
if (title.match(eq) != null) {
priority += (title.match(eq).length * 5)
}
priority += (title.match(rq).length); // Is this wise?
}
if (keywords.match(rq) != null) {
if (keywords.match(eq) != null) {
priority += (keywords.match(eq).length * 3);
}
priority += (keywords.match(rq).length); // Is this wise?
}
}
これらの振る舞いは、アルゴリズムによる決定を行うことで避けられませんが、これを行うためのより良い方法を考えることはできません(そして明らかにもっと良い方法があります)。多分私はそれを考えすぎています。