MySQL をデータベースとして使用するアプリケーションに取り組んでいます。ただし、ElasticSearch を使用するオートコンプリート/「as-you-type results」を使用した検索機能を追加しています。MySQL から ElasticSearch に関連データを取得することは問題ではなく、私の検索は正常に機能します。
ただし、パフォーマンスの問題がいくつかありますが、「最初の」検索クエリを作成する場合のみで、これには約 1 ~ 5 秒かかります。「最初」とは、数分以内の最初の検索を意味します。最初の検索から 10 秒以内に 2 回目の検索を行うと、ほぼ瞬時に結果が得られますが、最初の検索から 5 分後に 2 回目の検索を行うと、結果が得られるまでにかなりの時間がかかります。
私の最初の考えでは、HTTP 接続 (.NET Framework によってプールされている) のセットアップが余分な遅延を引き起こしていると考えていましたが、解決に DNS 名を使用していない場合でも、高速 LAN ネットワークで 1 ~ 5 秒かかるのは奇妙に思えます。エラスティックサーチ サーバー。
私が調べるべき他の可能性のある犯人/通常の容疑者はいますか? それとも、initial-HTTP-connection-delay は妥当なように見えますか (それについてどうすればよいでしょうか?)?
検索は次のように行われます (ElasticSearch/NEST クライアントはシングルトンとして管理され、既に作成されていることに注意してください)。
public IEnumerable<Person> Search(ElasticClient esclient, IEnumerable<string> queryParts, int groupId) {
// Make the search query and return the results.
return esclient.Search<Person>(s => s
.Query(q =>
q.Terms(p => p.FirstName, queryParts) ||
q.Terms(p => p.LastName, queryParts)
)
.Filter(f => f
.Term(p => p.MemberOfGroups, new int[] { groupId })
)
).Documents;
}
編集: 私の ElasticClient は次のように作成されます:
new ElasticClient(new ConnectionSettings(new Uri(esUrl), index));