gpt4 book ai didi

performance - 如何加快此多匹配Elasticsearch查询的速度?

转载 作者:行者123 更新时间:2023-12-03 02:26:22 26 4
gpt4 key购买 nike

如何加快这个Elasticsearch查询的速度?
我发现在multi_match.fields中指定一小部分字段会有所帮助。我还可以做些什么?
这是查询...,下面是索引映射。
索引中有800万条记录。

顺便说一句,我有时在查询中包括聚合。我发现延迟加载聚合有助于提高聚合部分的性能。

{
"from": 0,
"size": 26,
"timeout": "60s",
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "a",
"fields": [
"firstname",
"lastname",
"home_address1",
"home_zip",
"home_city"
],
"type": "phrase_prefix",
"operator": "OR",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"_source": {
"includes": [
"firstname",
"lastname",
"home_address1",
"home_city"
],
"excludes": []
},
"sort": [
{
"firstname.keyword": {
"order": "asc"
}
}
]

}

这是索引映射:
{
"contacts_3_w0iuvbowu5": {
"mappings": {
"properties": {
"contact_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"created": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"date_of_birth": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dist_congress": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dist_precinct": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dist_state_house": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dist_state_senate": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dist_ward_township": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"email": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"firstname": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"eager_global_ordinals": true,
"ignore_above": 256
}
}
},
"fulltext": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_address1": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"eager_global_ordinals": true,
"ignore_above": 256
}
}
},
"home_address2": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_city": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"eager_global_ordinals": true,
"ignore_above": 256
}
}
},
"home_house_num": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_phone": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_postdirection": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_predirection": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_state": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"home_street_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_street_type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"home_zip": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"eager_global_ordinals": true,
"ignore_above": 256
}
}
},
"imported": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"lastname": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"eager_global_ordinals": true,
"ignore_above": 256
}
}
},
"list_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"middlename": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"registration_date": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"registration_status": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"sex": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"state_voter_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"suffix": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}

最佳答案

这里有一些想法:

  • 您未在_source中包含zip,但仍允许搜索此字段。这是您在业务案例中需要的吗?
  • 您正在搜索期间应用排序。您可以在索引时间内应用排序顺序。检查文档的此部分https://www.elastic.co/guide/en/elasticsearch/reference/master/index-modules-index-sorting.html。另外,将track_total_hits设置为false可能会带来一些改进。
  • 考虑添加一些prefix_length。您可以将其设置为2。在大多数情况下,它并不会真正影响用户体验。
  • auto_generate_synonyms_phrase_query,您需要这个吗? https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html。如果不这样做,则将其设置为false。
  • 您还可以考虑减少max_expansions。总体上减少它,或者根据您输入的长度(在应用程序级别上)减少它。基本上,如果您有类似a的内容,则可以将其设置为20或30。无需将其设置为50,结果(ux-wise)对这两种方法都没有帮助。
  • 关于performance - 如何加快此多匹配Elasticsearch查询的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60946567/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com