gpt4 book ai didi

elasticsearch - 即使我使用 “loading:eager”,Elasticsearch 1st查询也很慢

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

我在 child 与 parent 之间的关系上使用了这种映射(为了简化问题,使用了一个较短的版本),其中itemparentuser_itemschildren

    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
}}}}]}}}'

在此查询上,它必须在字段 titlebody上搜索给定 mercado上的字符串 user_id,在本例中为 655

这些查询中的第一个是veeeeeeeeeeeeeeeeeery缓慢,最多可能需要15秒。以下速度非常快(<0.5秒)

我读到,第一个查询如此缓慢的原因是它被缓存,然后其余查询很快,因为它可以处理缓存的内容。

我阅读了可以使用 "loading" : "eager"提升第一个查询的信息。因此,我在名为 myindex_new的新索引上创建了新映射
    {
"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" },
}}}}'

...并重新索引所有内容,如下所示:
curl -XPOST 'localhost:9200/_reindex' -d '{
"source" : {
"index" : "myindex"
},
"dest" : {
"index" : "myindex_new"
}
}'

问题是我没有得到更好的结果。如果我用 eager查询新索引,则第一个查询仍然很慢。我也尝试通过在子字段上添加 eager来完成,但是它仍然很慢。

我需要做些不同的事情吗?我在重新索引上做错了什么?

提前致谢!

最佳答案

Fielddata用于对这些特定字段进行排序和聚合。这对您的特定查询没有帮助,因为您不使用这些字段进行排序或在聚合中使用。我会尝试不同类型的请求加载,并且在子项上而不是父项的字段:"loading": "eager_global_ordinals"。更完整的示例here

亲子关系使用全局顺序来加快加入速度。全局序数有两个目的:通过associating numerics with string fields和我上面提到的方法降低内存使用量。

Elasticserch正在使用 parent 和 child 之间的内存中连接来使关系正常运行。对于这些联接,使用全局序号。它们需要构建和预加载。使用"loading": "eager_global_ordinals"可以预加载全局序号,并加快搜索速度,因为这些联接已经预加载在内存中。

关于elasticsearch - 即使我使用 “loading:eager”,Elasticsearch 1st查询也很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129301/

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