我正在实现自动完成字段,其中建议还包含匹配文档的数量。
我只是使用带有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/