Я работаю над приложением, которое использует MySQL в качестве своей базы данных. Однако я добавляю функцию поиска с автозаполнением/"результатами по мере ввода", которая использует ElasticSearch. Получение соответствующих данных из MySQL в ElasticSearch не является проблемой, и мои поиски работают нормально.
Однако у меня есть некоторые проблемы с производительностью, но только при выполнении «первого» поискового запроса, который занимает около 1-5 секунд. Под «первым» я подразумеваю первый поиск в течение пары минут; второй поиск в течение 10 секунд после первого поиска дает почти мгновенные результаты, в то время как второй поиск через пять минут после первого дает результаты только после значительной задержки.
Моя первоначальная мысль заключалась в том, что настройка HTTP-соединения (которое объединяется .NET Framework) вызывала дополнительную задержку, но кажется странным, что это займет 1-5 секунд в быстрой сети LAN, когда даже не используется DNS-имя для разрешения сервер ElasticSearch.
Есть ли другие возможные виновники/обычные подозреваемые, на которых мне следует обратить внимание? Или начальная задержка HTTP-соединения кажется разумной (и что мне с этим делать?)?
Поиск выполняется следующим образом (обратите внимание, что клиент 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;
}
РЕДАКТИРОВАТЬ: My ElasticClient создается следующим образом:
new ElasticClient(new ConnectionSettings(new Uri(esUrl), index));
ElasticClient
? - person Rob   schedule 26.10.2015Person
? - person Russ Cam   schedule 03.11.2015