当大量文档匹配时,elasticsearch ngram会变慢

时间:2017-11-22 03:31:30

标签: elasticsearch elasticsearch-5

我正在按照此示例键入功能时实施搜索: Edge NGram with phrase matching

我觉得查询时间与匹配文档的数量有关,即使我只请求前5个文档。

我的索引有3.2亿个文档。当我的查询是" l" 600万个文档与查询匹配,运行查询需要22毫秒。但是当我的查询是" a" 1.33亿个文档与查询匹配,需要400毫秒。同样,我只要求前5个文件。

请参阅下面的索引定义和查询。

我试图让我的所有查询都少于100毫秒。我该如何实现这一目标?我错过了什么?

这是我的索引定义:

`

PUT /ss
{
    "settings": {
        "analysis": {
            "filter": {
                "english_poss_stemmer": {
                    "type": "stemmer",
                    "name": "possessive_english"
                },
                "edge_ngram": {
                    "type": "edgeNGram",
                    "min_gram": "1",
                    "max_gram": "25",
                    "token_chars": [
                        "letter",
                        "digit"
                    ]
                }
            },
            "analyzer": {
                "edge_ngram_analyzer": {
                    "filter": [
                        "lowercase",
                        "english_poss_stemmer",
                        "edge_ngram"
                    ],
                    "tokenizer": "standard"
                },
                "my_standard": {
                    "filter": [
                        "lowercase",
                        "english_poss_stemmer"
                    ],
                    "tokenizer": "standard"
                }
            }
        }
    },
    "mappings": {
        "ss": {
            "_all": {
                "enabled": false
            },
            "properties": {
                "name": {
                    "search_analyzer": "my_standard",
                    "analyzer": "edge_ngram_analyzer",
                    "type": "text"
                },
                "type": {
                    "search_analyzer": "keyword",
                    "analyzer": "keyword",
                    "type": "text"
                },
                "tax_id": {
                    "search_analyzer": "keyword",
                    "analyzer": "keyword",
                    "type": "text"
                }
            }
        }
    }
}

`

这是我的问题:

GET /ss/_search
    {
            "from": 0,
            "size": 5,
            "query": {
                "bool": {
                    "must": {
                        "match_all": {}
                    },
                    "filter": {
                        "match_phrase": {
                            "name": "a"
                        }
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

我在克1中看不到任何要点,我认为将克限制为6是有意义的。

您有:

stDev

更好地拥有:

"min_gram": "1"
"max_gram": "25"