Я использую этот вид сопоставления (ну, это краткая версия, чтобы упростить вопрос) в отношении child-parent, где item
является родителем и user_items
это дети.Первый запрос Elasticsearch медленный, остальные из них быстрые
curl -XPUT 'localhost:9200/myindex?pretty=true' -d '{
"mappings": {
"items": {
"dynamic": "strict",
"properties" : {
"title" : { "type": "string" },
"body" : { "type": "string" },
}},
"user_items": {
"dynamic": "strict",
"_parent": {"type": "items" },
"properties" : {
"user_id" : { "type": "integer" },
"source_id" : { "type": "integer" },
}}}}'
И тип запроса я обычно делаю:
curl -XGET 'localhost:9200/myindex/items/_search?pretty=true' -d '{
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": ["title", "body"],
"query": "mercado"
}
},
{
"has_child": {
"type": "user_items",
"query": {
"term": {
"user_id": 655
}}}}]}}}'
В этом запросе он должен искать на полях title
и body
Строка mercado
на данный user_id
, в этом случае 655
.
Я читал, что причиной столь медленного первого запроса является то, что он кэшируется, а остальные запросы выполняются быстро, поскольку он работает с кэшированным контентом.
я прочитал, я могу сделать первый запрос быстрее, используя eager для предварительной загрузки мои данные (с помощью "loading" : "eager"
, верно?), Но я не знаю, что я имею в поджать. Должен ли я использовать earger
на title
и body
следующим образом?
{
"mappings": {
"items": {
"dynamic": "strict",
"properties" : {
"title" : { "type": "string" ,
"fielddata": {
"loading" : "eager"}},
"body" : { "type": "string",
"fielddata": {
"loading" : "eager"}},
}},
"user_items": {
"dynamic": "strict",
"_parent": {"type": "items" },
"properties" : {
"user_id" : { "type": "integer" },
"source_id" : { "type": "integer" },
}}}}'
Любые другие рекомендации по ускорению/сохранению первого запроса приветствуются. Заранее спасибо
PS: Я использую ES 2.3.2 под машиной Linux, и у меня в общей сложности 25.396.369 документов.
Какая версия ES вы используете? – Val
Вы можете использовать нагреватели, но сначала убедитесь, что он не заменяет. На какой ОС вы работаете ES? – AndreKR
@Val 2.3.2 и я использую Linux. –