elasticsearch - 优化ElasticSearch聚合搜索建议

标签 elasticsearch analyzer

我正在实现自动完成字段,其中建议还包含匹配文档的数量。

我只是使用带有include过滤器的术语聚合来实现此目的。因此,例如,假设用户输入“克莱斯勒”,则可能会生成以下查询:

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                ...
            ]
        }
    },
    "aggs": {
        "filtered": {
            "filter": {
                ...
            },
            "aggs": {
                "suggestions": {
                    "terms": {
                        "field": "prefLabel",
                        "include": "Chry.*",
                        "min_doc_count": 0
                    }
                }
            }
        }
    }
}

这工作正常,我能够获取所需的数据。但是,我担心这样做的优化不是很好,在对文档建立索引后可以做更多的事情。

当前,我们有以下映射:
{
    ...
    "prefLabel":{
        "type":"string",
        "index":"not_analyzed"
    }
}

我想知道是否要添加一个分析字段,像这样:
{
    ...
    "prefLabel":{
        "type":"string",
        "index":"not_analyzed",
        "copy_to":"searchLabel"
    },
    "searchLabel":{
        "type":"string",
        "analyzer":"???"
    }
}

所以我的问题是:什么是最佳的索引时间分析器? (或者,这只是疯了吗?)

最佳答案

我认为edge ngram tokenizer可以加快速度:

curl -XPUT 'localhost:9200/test_ngram' -d '{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "suggester_analyzer" : {
                    "tokenizer" : "ngram_tokenizer"
                }
            },
            "tokenizer" : {
                "ngram_tokenizer" : {
                    "type" : "edgeNGram",
                    "min_gram" : "2",
                    "max_gram" : "7",
                    "token_chars": [ "letter", "digit" ]
                }
            }
        }
    },
    "mappings": {
        ...
             "searchLabel": {
                 "type": "string",
                 "index_analyzer": "suggster_analyzer",
                 "search_analyzer": "standard"
             }
        ...
    }
}'

关于elasticsearch - 优化ElasticSearch聚合搜索建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35275806/

相关文章:

elasticsearch - Elasticsearch索引关闭,无法恢复,无法打开

elasticsearch - 启动Elasticsearch.bat后出现NoShardAvailableException

java - 使用 Elasticsearch RestHighLevelClient 聚合日期

elasticsearch - 以破折号开头的查询值导致elasticsearch count API失败

java - 推荐使用哪种 Java 静态代码分析器来创建报告?

elasticsearch - Elasticsearch :对同一数据运行多个分析器

java - 如何从Lucene中的TokenStream中删除数字?

elasticsearch - 聚合问题(数字四舍五入?)

java - "JavaSonarQube"和 "Java Common Sonarqube"的分析器

elasticsearch - 比赛未能通过Elasticsearch