Elasticsearch-以FVH和模糊性突出显示需要花费很长时间进行处理

时间:2018-10-18 06:51:43

标签: elasticsearch

我已经索引了包含150多个元数据的单个文档,每个元数据都带有映射:

"ACTIVE": {
    "type": "text",
    "term_vector": "with_positions_offsets",
    "fields": {
        "autocomplete_analyzed": {
            "type": "text",
            "analyzer": "autocomplete"
            },
        "keyword": {
            "type": "keyword",
            "ignore_above": 256
        }
    }
}

并进行设置:

"analysis": {
    "analyzer": {
        "autocomplete": {
            "filter": [
                "lowercase"
            ],
            "tokenizer": "autocomplete"
        }
    },
    "tokenizer": {
        "autocomplete": {
            "min_gram": "3",
            "tokenize_on_chars": [
                "whitespace",
                "letter",
                "digit"
            ],
            "type": "edge_ngram",
            "max_gram": "7"
        }
    }
}

我已经使用术语_vector来在查询中使用快速矢量突出显示。 我的查询:

{
    "from": 0,
    "size": 24,
    "query": {
        "bool": {
            "should": [
                {
                    "multi_match": {
                        "query": "current",
                        "type": "best_fields",
                        "fields": []
                    }
                },
                {
                    "query_string": {
                        "query": "*current*",
                        "fields": []
                    }
                },
                {
                    "multi_match": {
                        "query": "current",
                        "fuzziness": "1",
                        "fields": []
                    }
                }
            ],
            "minimum_should_match": 1
        }
    },
    "highlight": {
        "type": "fvh",
        "fields": {
            "*": {}
         }
    }
}    

我的查询要求模糊性,通配符和短语匹配。 模糊性和通配符根据我对后端的要求被禁用或启用。但是在自由文本搜索中,我必须同时启用这两项功能,包括突出显示。

  1. 通过突出显示,我的查询花费了超过15000毫秒,但没有突出显示则花费了800毫秒
  2. 没有模糊和突出显示大约需要1200ms,没有模糊和突出显示大约需要500ms。

由于模糊和突出显示而导致的查询缓慢。 如何用术语突出显示矢量索引文档?为什么查询运行这么慢?是由于我的查询还是由于索引数据?因为,我将处理数百万个文档。 解决这个时间问题的最佳方法是什么?

0 个答案:

没有答案